【问题标题】:Uncaught SyntaxError: Unexpected token < using JsonpUncaught SyntaxError: Unexpected token < using Jsonp
【发布时间】:2017-10-04 12:47:35
【问题描述】:

问题:

Uncaught SyntaxError: Unexpected token

我尝试了什么

请求:Jsonp
响应:返回 XML 响应 200。
跨域请求这就是为什么使用数据类型:jsonp

脚本代码:

$.ajax({
    url: "some url",
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
    },
    type: "POST", /* or type:"GET" or type:"PUT" */
    data:myusername,
    crossDomain: true, 
    dataType: 'jsonp',
    data: {
        'name':myusername
    },
    success: function (result) {
        console.log(result);
    },
    error: function () {
        console.log("error");
    }
    //});
});

这里的 AJAX 响应是 XML。
但是有人可以告诉我如何解决意外的令牌问题。
响应是 XML。

我找到的解决方案是第三方请求

 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]);
       });

欢迎提出任何建议。

【问题讨论】:

  • 响应是 XML,您正在尝试将其解析为 JSON。你希望这能奏效……为什么?
  • 我正在尝试解析 xml 而不是 json
  • 当您将响应数据类型设置为jsonjsonp 时,jquery 将尝试为您解析它。由于我希望现在显而易见的原因,它因解析错误而失败。另请注意,jsonp 本质上是不安全的。如果跨域资源没有 CORS 标头,您可能只想通过自己的域进行管道传输。
  • 我投票结束这个问题,因为“不清楚你在问什么”。如果您可以将其编辑为连贯一致,我将删除投票。我认为您要问的是“我如何 CORS ajax 请求?”、“如果另一个域上的资源没有 CORS 标头,我该怎么办?”和“如何解析来自 ajax 调用的 xml 响应?”。请提出一个单一明确的问题。
  • 任何人都可以建议使用js在跨域请求中出现任何错误获取xml结果的最佳方法

标签: javascript jquery


【解决方案1】:

问题在于“dataType: 'jsonp'”这一行。以这种方式设置 ajax 调用期望结果是一个 jsonp(一个 json 对象包装为回调中的参数......)如果您正在进行跨域调用(由于 CORS),这很有用。您必须设置一个“dataType:'xml'”

编辑 考虑到您必须进行 CORS 调用,您必须更改 api 的输出,至少制作类似

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

并从字符串中解析 xml “callbackName”是在页面中声明的函数或方法的名称,该函数或方法进行 ajax 调用并将解析来自 api 的 json...例如:

function callbackName(result) {
  console.log($.parseXML(result.value)); 
}

【讨论】:

  • 我的要求 cros "dataType: 'xml' 它在 cros 请求时停止
  • 好吧,那么您必须更改 api 的输出,至少制作类似“callbackName({value:'... you xml ...'}) 并从字符串 P.s.“callbackName”是在页面中声明的函数或方法的名称,该函数或方法进行 ajax 调用,并将解析来自 api 的 json ......例如 function callbackName(result) { console.log(result.值);}
  • 你能给我一些jsonp新手的例子吗
  • @RobertoBisello 我给了你一个 +1,但请注意 jsonp 本质上是不安全的,推荐使用它是...有争议的。
  • @JaredSmith 我同意,jsonp 不是很安全,但我不建议使用 jsonp,考虑到给定的上下文,我已经找到了 afeef 问题的解决方案......老实说,我没有看到任何其他解决方案:(
【解决方案2】:

JSON 和 XML 是任意嵌套的数据交换格式。您获取一个(格式良好的)字符串并根据格式规则将其转换为数据结构。他们的相似之处就到此为止了。

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

使用 XML 解析器(就像每个浏览器内置的解析器)而不是 JSON 解析器来解析 XML 不会引发错误。

但您的实际问题是它是一个跨域资源,浏览器(有充分理由)不会让您这样做。如果您需要一个跨域资源并且您无法控制它并且它没有 CORS 标头,那么您有几个选择:

  1. 请求控制资源的实体添加CORS Header
  2. 通过您的域通过管道传输资源。

扩展选项 2:

您的页面从您的网络服务器请求资源,您的网络服务器向跨域资源发出 http 请求,然后将结果发送回浏览器。

关于 JSONP

JSONP 是在 CORS 之前发明的一种黑客技术,用于绕过浏览器的安全模型。它(意味着)供了解风险、知道他们在做什么以及为什么做的人使用。它可能涉及在您的页面上执行任意第三方代码。不用说,这很糟糕。

【讨论】:

  • 嗨,我们需要第三方网址吗(如果服务器不允许跨域为真。)
  • @afeef 那么您必须执行选项 2 并在服务器端获取数据并将其返回给浏览器,以便它来自您的域。
猜你喜欢
  • 1970-01-01
  • 2018-06-18
  • 2013-06-28
  • 2015-07-04
  • 1970-01-01
  • 2015-10-13
  • 2013-02-12
  • 2013-12-29
  • 2013-10-10
相关资源
最近更新 更多