Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未捕获的语法错误:意外标记<;使用Jsonp_Javascript_Jquery - Fatal编程技术网

Javascript 未捕获的语法错误:意外标记<;使用Jsonp

Javascript 未捕获的语法错误:意外标记<;使用Jsonp,javascript,jquery,Javascript,Jquery,问题: 未捕获的语法错误:意外的标记问题在于行“dataType:'jsonp'”。通过这种方式设置,ajax调用期望结果是jsonp(在回调中包装为参数的json对象…),如果您正在进行跨域调用(由于CORS),这非常有用。您必须设置“数据类型:'xml'” 编辑 考虑到您必须执行CORS调用的复杂性,您必须更改api的输出,至少使 callbackName({value:'<your><xml>...</xml></your>'}) JSON

问题:

未捕获的语法错误:意外的标记问题在于行“dataType:'jsonp'”。通过这种方式设置,ajax调用期望结果是jsonp(在回调中包装为参数的json对象…),如果您正在进行跨域调用(由于CORS),这非常有用。您必须设置“数据类型:'xml'”

编辑 考虑到您必须执行CORS调用的复杂性,您必须更改api的输出,至少使

callbackName({value:'<your><xml>...</xml></your>'})

JSON和XML是任意嵌套的数据交换格式。获取一个(格式正确的)字符串,并根据格式规则将其转换为数据结构。他们的相似之处就在这里

因此,您不能将XML解析为JSON,它们有不同的规则将字符串(如HTTP请求返回的字符串)转换为数据结构。这就是为什么你会出错

用XML解析器(就像每个浏览器内置的解析器)而不是JSON解析器解析XML不会抛出错误

但您的实际问题是,它是一个跨域资源,而浏览器(有充分的理由)不允许您使用它。如果您需要一个跨域资源,但您无法控制它,并且它没有CORS头,那么您有几个选项:

  • 请求控制资源的实体添加CORS头
  • 通过您的域传递资源
  • 要扩展选项2,请执行以下操作:

    页面从Web服务器请求资源,Web服务器向跨源资源发出http请求,然后将结果发送回浏览器

    关于JSONP
    JSONP是CORS之前发明的一种黑客,目的是绕过浏览器的安全模型。它是用来让那些了解风险、知道自己在做什么以及为什么要做的人使用的。它可能涉及在页面上执行任意第三方代码。不用说,这很糟糕。

    响应是XML,您试图将其解析为JSON。您希望它能起作用……为什么?我正在尝试解析xml而不是json当您将响应数据类型设置为
    json
    jsonp
    时,jquery将尝试为您解析它。这是失败的解析错误的原因,我希望现在是显而易见的。还要注意,jsonp本质上是不安全的。如果跨域资源没有CORS头,您可能只想通过您自己的域进行传输。我投票结束这个问题,因为“不清楚您在问什么”。如果你能把它编辑得连贯一致,我将取消投票。我认为您要问的是“我如何处理CORS ajax请求?”、“如果另一个域上的资源没有CORS头,我该怎么办?”,以及“我如何解析来自ajax调用的xml响应?”。请问一个简单明了的问题。有谁能建议在跨域请求中使用jsmy requirement cros“数据类型:'xml'在cros请求时停止的最佳方法吗?好的,那么您必须更改api的输出,至少做一些类似“callbackName({value:'…you xml…})的事情)解析字符串P.s.“callbackName”中的xml是页面中声明的函数或方法的名称,该函数或方法进行ajax调用,并将解析api中的json。。。例如函数callbackName(result){console.log(result.value);}你能给我举个新例子吗jsonp@RobertoBisello我给了你一个+1,但请注意jsonp本质上是不安全的,建议使用它是。。。有争议。@JaredSmith我同意,jsonp并不是真正安全的,但我不建议使用jsonp,我已经找到了解决afeef问题的方法,考虑到给定的上下文。。。老实说,我没有看到任何其他解决方案:(嗨,jared,我们是否需要第三方url(如果服务器不允许跨域true。)@afeef,那么您必须执行选项2,从服务器端获取数据并将其返回到浏览器,以便它来自您的域。
     var urljson='cross-damin-url';
    
    
       var yql = 'http://query.yahooapis.com/v1/public/yql?q=' + 
         encodeURIComponent('select * from xml where url="' + urljson + '"') + 
       '&format=xml&callback=?';
    
    
        $.getJSON(yql, function (data) {
          console.log(data.results[0]);
           });
    
    callbackName({value:'<your><xml>...</xml></your>'})
    
    function callbackName(result) {
      console.log($.parseXML(result.value)); 
    }