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
'programing' 카테고리의 다른 글
Word press Gutenberg 블록 안에서 Add on click 이벤트 (0) | 2023.10.12 |
---|---|
Angular JS : ng-hide 및 ng-show API (0) | 2023.10.12 |
Wordpress Gutenberg ACF 블록 블록이 열렸을 때 JS를 추가하는 방법 (0) | 2023.10.12 |
jQuery: 선택한 파일 이름을 가져옵니다.jQuery: 선택한 파일 이름을 가져옵니다. (0) | 2023.10.12 |
스피치 라이브러리에 오픈 소스 텍스트 (0) | 2023.10.12 |