【问题标题】:"Uncaught SyntaxError: Unexpected token <" after successful HTTP Request成功 HTTP 请求后出现“未捕获的语法错误:意外的令牌 <”
【发布时间】:2016-12-30 04:20:49
【问题描述】:

我正在尝试使用 jQuery 和 SAP 后端系统提供的 ODATA REST 服务来执行 AJAX。

          $.ajax({
                type: 'GET',
                url: 'http://sapxx.sapms/sap/opu/odata/.../',                   
                async: true,
                dataType: 'jsonp',                  
                username: 'username',
                password: 'password',
                crossDomain: true,                  
                success: function() {
                    alert('Done.');
                },
                error: function() {
                    alert('Error.');
                },
            });

请求返回状态 200,我从服务器得到响应,该响应称为“?callback=jQuery3100687...”,并包含 xml 代码。所有这些都在 Chrome 调试器中可见。但是在成功的 HTTP 请求之后,我得到了上述错误

Uncaught SyntaxError: Unexpected token <

我怀疑错误是由于请求中设置为“jsonp”的“dataType”参数造成的。有没有办法解决这个错误?服务器只能使用 XML 格式进行响应。该请求仅在 dataType 设置为“jsonp”时才有效,我猜是因为它启用了 CORS。发送请求后,尽管状态为 200,但我收到“错误”警报。

【问题讨论】:

  • 您的数据回复无效,请查看您的回复。
  • 您不能神奇地让服务器将响应更改为 JSONP。服务器需要这样做。 CORS 的唯一解决方法是在您的服务器上使用代理或在其他设置 CORS 标头或返回 JSONP 的服务器上使用代理。
  • 有没有办法只从响应中提取 XML 内容?我可以在调试器中看到响应,尽管存在 XML 问题,难道不应该有办法访问它吗?

标签: javascript jquery ajax http


【解决方案1】:

您说您从服务器收到xml 响应。不过,您的 ajax 请求是为 jsonp 设置的:

dataType: 'jsonp',

试试这个:

dataType: 'xml',
success: function(xml) {
    //remainder of the code
}

如果您将dataType 设置为jsonp,jQuery 将尝试将响应解析为 JSON。这会导致错误,因为响应不是 JSON。

【讨论】:

  • 当我将 dataType 设置为 XML 时,请求停止工作,我得到“请求的资源上不存在 'Access-Control-Allow-Origin' 标头。因此不存在 Origin 'localhost:xxxxxx'允许访问。响应的 HTTP 状态代码为 401。"
  • 您不能将 jsonp 与 XML 一起使用。这是不可能的,除非你 write a ugly hack 让它工作。要么获取以 JSON 格式返回的数据,要么找到 CORS 问题的解决方法。
  • 但是我收到了一个响应,其中包含我正在寻找的 XML 代码。有没有办法告诉我的 webapp 响应是 XML 而不是 jsonp?
  • @doktormatte 要么将服务器响应更改为 JSON,要么使用其他方式来避免跨域调用。考虑改用服务器端调用(更健壮)。
  • 好吧,我已经取得了一些进展,现在服务器响应是 JSON 格式。错误消息现在已更改为:“Uncaught SyntaxError: Unexpected token :”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-28
  • 1970-01-01
  • 2014-02-09
  • 2011-04-07
  • 2014-05-09
  • 2014-11-24
相关资源
最近更新 更多