programing

ajax 응답으로 반환되는 스크립트 태그 내에서 javascript를 실행하는 방법

javamemo 2023. 10. 12. 21:27
반응형

ajax 응답으로 반환되는 스크립트 태그 내에서 javascript를 실행하는 방법

다음과 같이 jquery get request를 보냅니다.

$.get($(this).attr("href"), $(this).serialize(), null, "script");

제가 받기를 기대하는 답변은 스크립트 태그로 포장됩니다.

스크립트 태그 없이 반환되지 않는 한 브라우저에서 응답이 실행되지 않는 것으로 알고 있습니다.보통은 응답에서 태그를 제거하지만 이 상황에서는 원격 기계에서 실행 중인 코드에 접근할 수 없기 때문에 소스에서 태그를 제거할 수 없습니다.

응답 클라이언트 측에서 스크립트 태그를 제거하고 javascript를 실행할 수 있는 방법이 있습니까?

다음을 수행할 수 있어야 합니다.

$.get($(this).attr("href"), $(this).serialize(), function(data){
   var script = $(data).text();
   eval(script);
});

또는:

var myScript = new Function($('script#myscript',responseText).text());
myScript();

질문을 제대로 이해했다면 스크립트 태그에서 텍스트를 빼내는 것으로 충분합니다.

$(response).text()

http://docs.jquery.com/Ajax/jQuery.getScript 에 도움이 될까요?

Jose Basilio의 답변은 괜찮지만 eval을 jQuery의 globalEval 기능으로 대체하는 것을 추천합니다.

$.get($(this).attr("href"), $(this).serialize(), function(data) {
   script = $(data).text();
   $.globalEval(script);
});

globalEval스크립트의 반환 형식을 사용하여 ajax 메서드를 호출할 때 일반적으로 호출되는 함수입니다.

API 설명서에 나온 내용...

이 메서드는 (외부 스크립트를 동적으로 로드하는 데 중요한) 글로벌 컨텍스트 내에서 실행된다는 점에서 일반 자바스크립트 eval()을 사용하는 것과는 다르게 동작합니다.

응답이 '응답' 변수에 있다고 가정합니다.

script = response.replace(/<script>(.*)<\/script>/, "$1"); // Remove tags
eval(script); // Execute javascript

나는 이것을 약간 다르게 했고, 더 쉽게 하기 위해 php land를 사용했습니다. (나는 평가를 사용하는 것을 좋아하지도 않고, 눈에 띄는 큰 개서도 좋아하지 않습니다.

나는 모든 jquery를 그렇게 php 문자열에 넣었습니다 (실제로는 자바스크립트가 훨씬 더 많았습니다)

    $out .= "       $('#save_now').button(); \n";
    $out .= "       $('#save_now').click( function() {\n";
    $out .= "          return false;\n";
    $out .= "       }); \n";

그 다음에 php land에서도

    echo "<script>\n";
    echo "  function onOpen(){ \n";
    echo $out;
    echo "  } \n";
    echo "</script>\n";

jQuery $.ajax call에서 나는 이것을 합니다.

   $.ajax({
           url: geturl,
           type: 'post',
           data: getparams,
           success: function(data) {
               mydiv.html(data);  
               onOpen();  
           }, 
           cache: false
      });

보시다시피 pph 랜드는 필요 없습니다. 제 코드 베이스에 있는 것뿐입니다. 제가 해야 할 필요가 있었습니다. 트릭은 제거하는 것입니다.$(document).ready(function(){});그리고 너만의 것을 굴립니다.

언급URL : https://stackoverflow.com/questions/978101/how-to-execute-javascript-inside-a-script-tag-returned-by-an-ajax-response

반응형