1

AJAXによって実行されているPHPスクリプトがあります.PHPスクリプトは、divを閉じるために使用している実際のPHPファイルのjsスクリプトを除いて、すべて正常にロードします(PHPファイルがAJAX経由で実行されない場合、すべてのスクリプトは参考までに動作します)..

これは ajax によって PHP ファイルで実行されていないスクリプトです。

 echo "<script> closeOne('" . $postid . "'); </script>";

div を閉じる JS スクリプトは、ページのヘッダーに含まれています。

これは私が使用しているAJAXスクリプトです

<script type="text/javascript">
function mainload(str)
{
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest(str);
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
        document.getElementById("loadmain").innerHTML=xmlhttp.responseText;
        }
      }
    xmlhttp.open("GET","mainload.php?page="+str,true);
    xmlhttp.send();
}
</script>

どんな助けでも大歓迎です。

4

2 に答える 2

0

スクリプト要素をDOM要素のinnerHTMLに追加すると、JSはすぐには実行されません。そのスクリプト要素が追加されたばかりだからです。

そのタグはまったく解析されません。

理想的には、JSONでラップされた関数の形式で応答を送信する必要があります。

PHPページからこのような出力を送信できます。

echo "(function(){ closeOne('" . $postid . "'); })";

それに応じて、evalを使用して関数を含むこの文字列を評価できます。

 codeToExecute = eval(xmlhttp.responseText);

次に、関数を呼び出します。

 codeToExecute();

:サーバーから関数を送信し、evalを使用して直接実行すると、セキュリティ上の問題になる可能性があります。注意して、JS libraray関数を使用して、文字列をJSONオブジェクトに評価することをお勧めします。

jQuery、prototype、senchaのライブラリに文字列からJSONへのコンバーターがあります。それらをより適切に使用するか、ブラウザーがサポートしている場合は、JSON.parseも適切なオプションです。

しかし、私はあなたに概念が明確であることを望みます。

または、サーバーから投稿IDをJSONで送信し、次のような応答でcloseOneを呼び出すこともできます。

PHPでは、

echo "{post_id:".$postid."}";

応答が来ると、

responseObject =  eval("("+xmlhttp.responseText+")");

closeOne(responseObject.post_id);
于 2012-09-17T12:50:34.080 に答える
0

デフォルトでは、ajax レスポンスの JS は実行されません。JS ステートメントを解析して識別し、js の eval 関数を使用して実行する必要があります。独自のコードを開始する例として、次のコードを参照してください。

var sc=xmlhttp.responseText;            
sc=sc.replace(/[\n\r\t\v\u00A0\u2028\u2029]{1,}/gm, ''); //Remove all types of White Space
sc=sc.match(/<.*?script.*?>.*?<\/.*?script.*>/gm); //divide into array, all the script tags

次に、それぞれの「sc」をループし、ループ内で次を実行します。

abc=loop_var.replace(/<.*?script.*?>(.*?)<\/script>/gm, "$1"); //remove script/open close tags and get JS only
eval(abc);
于 2012-09-17T12:45:55.587 に答える