php - 通过 AJAX 调试执行 Javascript

标签 php javascript html ajax

此代码有什么问题或可能导致此问题的原因是什么?它不会发出“你好”的警报,但会用 The Hello 和 Bye World 表填充 div。我想让它提醒“你好”。我也不知道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>

最佳答案

尝试不使用 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<script...></script> 中使用您的代码是不必要的,javascript 代码将在添加到 DOM 后立即执行。

新编辑:

你必须消除换行符 \n\r在您的 reponseText 中,以使您的脚本成为 eval uated 正确。此外,还有一个额外的 \在第一个 < 之前转义字符这破坏了你的代码。尝试:

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 都正确地用分号分隔。

如果您在页面的 head 中包含 JQuery 库,那么上面的内容应该适用于简单的脚本。 :

<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 的脚本,如您的链接答案中所述。

关于php - 通过 AJAX 调试执行 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10771158/

相关文章:

php - Laravel 迁移部署

javascript - 如何禁用仅输入特殊字符而不是上下左右键?

html - 如何为 "after"和 "before"DOM 伪元素设置 css 属性

php - 比较 MongoDB 中的文档

php - Laravel 收银员 + Stripe : No Such Customer

javascript - 使用 jQuery 在 html 中嵌入 URL

Javascript 优化

html - 表格上方的标题不符合分辨率

php - 编辑 WordPress 主题以类似于基于相同主题的另一个站点

javascript - 附加参数有什么用?