【问题标题】:how to echo a javascript script with php through ajax如何通过ajax用php回显javascript脚本
【发布时间】:2012-10-12 04:22:55
【问题描述】:

我希望在条件为真时回显 javascript 脚本, 另一个页面通过 ajax 调用此脚本所在的文件 由于某种原因,它不会回显<script>...</script> 部分。 如果我在那里放置一个常规字符串,它可以工作,但它不会回显 javascript。

$max = $int + 10;
  if($max >= $num_rows){
    $end = "<script>var end=1</script>";
  } else {
    $end = "<script>var end=0</script>";
  }

 echo $end;

阿贾克斯: 函数 onScroll(事件) { // 检查我们是否在 broser 窗口底部边缘的 100 像素内。 var closeToBottom = ($(window).scrollTop() + $(window).height() > $(document).height() - 100);

          if(closeToBottom) {

            if(end==0){
             // GET THE 10 NEXT ITEMS;
              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)
                   {
                   //document.getElementById("tiles").innerHTML=xmlhttp.responseText;




                         $('#tiles').append(innerHTML=xmlhttp.responseText);
                         int = int+10;
                         // Clear our previous layout handler.
                         if(handler) handler.wookmarkClear();

                         // Create a new layout handler.
                         handler = $('#tiles li');
                         handler.wookmark(options);


                         $(function() {
                            // Select all links whose attribute rel starts with lightbox
                            $('a[rel^=lightbox]').lightBox();
                         });


                           FB.XFBML.parse();

                   }

                 }
            } 
               $.extend({
                    getUrlVars: function(){
                      var vars = [], hash;
                      var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
                      for(var i = 0; i < hashes.length; i++)
                      {
                        hash = hashes[i].split('=');
                        vars.push(hash[0]);
                        vars[hash[0]] = hash[1];
                      }
                      return vars;
                    },
                    getUrlVar: function(name){
                      return $.getUrlVars()[name];
                    }
                  });

                  var request = $.getUrlVar('item');

                  if(request!=null){
                    var allR = "?int="+int+"&item="+request;
                  } else {
                    var allR = "?int="+int;
                  }


               xmlhttp.open("GET","tiles.php"+allR,true);
               xmlhttp.send();


             }

        };

谁能解决这个问题? 提前谢谢。

【问题讨论】:

  • 您还应该显示 Ajax 部分。 PHP 看起来不错。
  • 我不认为 Ajax 部分是问题,因为我通过 ajax 负载发送的所有其他内容,它只是不显示的 javascript 部分。但无论如何都是这样的:)

标签: php javascript ajax


【解决方案1】:

问题是您必须通过 Ajax 下载的文档位的 DOM 树并使用 eval 手动评估它,因为出于安全原因,浏览器不会自动解析和运行通过远程调用嵌入的 JavaScript 代码你。

你可以这样做:

var scripts = domElement.getElementsByTagName("script");
for (var i = 0; i < scripts; i ++) {
    eval(scripts[i].text);
}

【讨论】:

  • 它现在可以工作了,但是我之后解析了 facebook xml,现在不再这样了,如果我把 facebook 解析 xml 放在第一位,其余的代码就不再工作了......
  • 你是什么意思关注?你的意思是说我写的代码执行之后,页面上就没有 JavaScript 运行了吗?
  • $(function() { // Select all links whose attribute rel starts with lightbox $('a[rel^=lightbox]').lightBox(); }); var scripts = domElement.getElementsByTagName("script"); for (var i = 0; i &lt; scripts; i ++) { eval(scripts[i].text); } FB.XFBML.parse();
  • 这意味着在FB.XFBML.parse()的执行过程中发生了JS错误,进而停止了代码的执行。因此,您当前的问题(通过 Ajax 检索的脚本未执行)已解决,您现在必须更正其他错误。
  • 不客气。如果它对你来说太麻烦了,我建议你发布这个问题并充分解释它,然后你也可以让开:)
【解决方案2】:

使用 javascript 中的 eval() 来加载 javascript。只需查看以下示例

   var div = document.getElementById("tiles");
   div.innerHTML =xmlhttp.responseText;
   var x = div.getElementsByTagName("script"); 
   for(var i=0;i<x.length;i++)
   {
       eval(x[i].text);
   }

这是一个小片段代码,您应该在收到响应的地方注入。希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-27
    • 2016-03-19
    • 2018-06-21
    • 2013-12-02
    • 2020-10-15
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    相关资源
    最近更新 更多