向HTML元素添加语法错误

时间:2014-07-22 14:46:12

标签: javascript jquery html ajax yql

我使用YQL和jQuery.ajax从另一个网站检索内联JavaScript变量。此变量包含base64编码的完整XML文档。

当AJAX请求正常工作时,我无法弄清楚如何获取res.query.results并将其附加到动态制作的<script>元素。

这里是jQuery:

$.ajax({
    url: "http://query.yahooapis.com/v1/public/yql/dj/fsp?format=json",
    type: "GET",
    success: function(res) {
      var sc = $('script');
      $(sc).append(document.createTextNode('var '+$(res.query.results)));
      $('head').append(sc);
    }
});

这是控制台日志告诉我的内容:

enter image description here

任何想法或建议将不胜感激。谢谢大家!

1 个答案:

答案 0 :(得分:1)

三件事:

  1. 创建脚本元素,您需要$('<script>'),而不是$('script')。后者搜索所有script元素。

  2. 不需要createTextNode,jQuery会为您处理。

  3. 您通过拨打$()来过度执行此操作:

          var sc = $('<script>');
          sc.append(document.createTextNode('var '+res.query.results));
      //  ^ #1 (see below)                         ^ #2
    
    1. 您不想再次$(sc),它毫无意义,它已经是一个jQuery实例。

    2. 您不希望解析 res.query.results到jQuery实例中,您希望将字符串抓取到JavaScript变量中(显然)。

  4. Live example

    <!DOCTYPE html>
    <html>
    <head>
    <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
      <meta charset="utf-8">
      <title>Example</title>
    </head>
    <body>
    <script>
      (function() {
        "use strict";
    
        display("Doing query...");
        $.ajax({
          url: "http://query.yahooapis.com/v1/public/yql/dj/fsp?format=json",
          type: "GET",
          success: function(res) {
            display("Got result, creating <code>script</code>...");
            var sc = $('<script>');
            sc.append('var '+res.query.results);
            $('head').append(sc);
            display("length of <code>txt</code> global variable: " + window.txt.length);
          }
        });
    
        function display(msg) {
          var p = document.createElement('p');
          p.innerHTML = String(msg);
          document.body.appendChild(p);
        }
      })();
    </script>
    </body>
    </html>