1

このコードの何が問題なのか、またはこの問題の原因は何ですか? 「こんにちは」という警告ではありませんが、div を The Hello および Bye World テーブルで埋めています。「こんにちは」と警告したい。また、jqueryもわかりません。ありがとうございました

ファイル1

var xmlhttp;
if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }else{// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function(){
  if (xmlhttp.readyState==4 && xmlhttp.status==200){
     var reScript = /\<script.*?>(.*)<\/script>/mg;
     response = xmlhttp.responseText.replace(reScript, function(m,m1) {
     eval(m1);
     return "";
     });
    document.getElementById("div").innerHTML=response;
    }
  }
xmlhttp.open('GET','file2.php',true);
xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded');
xmlhttp.send();

ファイル2

  <table><tr><td>Hello World</td></tr></table>
  <script type="text/javascript">
  alert('hello');
  </script>
  <table><tr><td>Bye World</td></tr></table>
4

2 に答える 2

2

なしで試してくださいeval()

var xmlhttp;
if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }else{// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function(){
  if (xmlhttp.readyState==4 && xmlhttp.status==200){
     /*var reScript = /\<script.*?>(.*)<\/script>/mg;
     response = xmlhttp.responseText.replace(reScript, function(m,m1) {
     eval(m1);
     return "";
     });*/
    document.getElementById("div").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open('GET','file2.php',true);
//xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded'); //unnecessary for GET calls
xmlhttp.send(null);

Eval内でコードを使用する必要はありません。JavaScript コード<script...></script>は、DOM に追加されるとすぐに実行されます。

新しい編集:

\n\rスクリプトを適切に使用するには、reponseTextの改行を削除する必要がありevalます。また、コードを壊してい\た最初のエスケープ文字の前に余分なエスケープ文字がありました。<試す:

var xmlhttp;
if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }else{// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function(){
  if (xmlhttp.readyState==4 && xmlhttp.status==200){
     var reScript = /<script.*?>(.*)<\/script>/mg;
     response = xmlhttp.responseText.replace(/\n|\r/g, " ").replace(reScript, function(m,m1) {
     eval(m1);
     return "";
     });
    document.getElementById("div").innerHTML=response;
    }
  }
xmlhttp.open('GET','file2.php',true);
//xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded');
xmlhttp.send(null);

.replace(/\n|\r/g, " ")内のすべての改行を空白に置き換えるために を追加しました。responseTextこれにより、JS が適切に評価され、エンドユーザーに目に見える変化が生じません。すべての JS が適切にセミコロン化されている場合は" "、空白を空の文字列に置き換えることもできます。""

ページの に JQuery lib を含めると、上記は単純なスクリプトでうまく機能するはずですhead

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

AJAX 呼び出しは次のように単純です。

<script type="text/javascript">
$(document).ready(function(){
    $('#div').load('file2.php');
});
</script>

リンクされた回答に記載されているように、JQuery は responseText からスクリプトを自動的に解析します。

于 2012-05-27T02:15:07.347 に答える
0

これを試してください:

xmlhttp.onreadystatechange=function(){
  if (xmlhttp.readyState==4 && xmlhttp.status==200){
    var reScript = /<script.*?\>(.*)<\/script\>/mg.exec(xmlhttp.responseText)[1];
    var scriptElement = document.createElement('script');
    scriptElement.innerHTML = reScript;
    document.body.appendChild(scriptElement);
  }
}

コードをスクリプト要素に配置し、その要素を本文に追加すると、スクリプトが実行されます。

于 2012-05-27T02:33:49.087 に答える