我有一个由AJAX执行的PHP脚本,PHP脚本加载一切正常,除了我用来关闭div的实际PHP文件中的js脚本(如果PHP文件不通过AJAX运行,所有脚本都工作FYI) ..
这是由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>
任何帮助都将不胜感激。
答案 0 :(得分: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);
答案 1 :(得分:0)
如果将script元素添加到DOM元素的innerHTML,JS将不会立即运行。 因为刚刚添加了该脚本元素。
并且该标签根本不会被解析。
理想情况下,您应该以JSON包装函数的形式发送响应。
您可以从PHP页面发送这样的输出。
echo "(function(){ closeOne('" . $postid . "'); })";
作为回应,您可以使用eval评估包含该函数的String。
codeToExecute = eval(xmlhttp.responseText);
然后调用函数
codeToExecute();
注意:从服务器发送函数并使用eval直接执行它可能是一个安全问题。 小心并且更好地使用一些JS libraray函数来将字符串计算为JSON对象。
jQuery,prototype和sencha的图书馆中将会有String-To-JSON转换器。 更好地使用它们或者如果浏览器支持,JSON.parse也是一个不错的选择。
但我希望你能明白这个概念。
<强>替代地下, 您可以通过JSON从服务器发送post id,并在响应上调用closeOne,如下所示:
在PHP中,
echo "{post_id:".$postid."}";
当响应出现时,
responseObject = eval("("+xmlhttp.responseText+")");
closeOne(responseObject.post_id);