2016-08-23 152 views
0

我正在尝试使用jQuery与SAP后端系统提供的ODATA REST服务进行AJAX。成功HTTP请求后出现“Uncaught SyntaxError:Unexpected token <”

  $.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,我得到这被称为像服务器的响应“?回调= jQuery3100687 ......”并包含XML代码。所有这些都可以在Chrome调试器中看到。但是,成功的HTTP请求后,我得到上述错误

Uncaught SyntaxError: Unexpected token < 

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

+0

您的数据回复无效,请检查您的回复。 –

+0

http://stackoverflow.com/questions/24377804/cross-domain-jsonp-xml-response –

+0

你不能奇迹般地让服务器改变对JSONP的响应。服务器需要这样做。 CORS的唯一解决方法是在服务器上使用代理,或者在设置CORS头文件或返回JSONP的其他服务器上使用代理。 – epascarello

回答

1

你说你从服务器得到一个xml响应。在Ajax请求设立JSONP,虽然:

dataType: 'jsonp', 

试试这个:

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

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

+0

当我将dataType设置为XML时,请求停止工作,我得到 “No'Access-Control-Allow-Origin'标题出现在请求的资源上。该响应具有HTTP状态码401。“ – doktormatte

+0

你不能在XML中使用jsonp。这是不可能的,除非你[写一个丑陋的黑客](http://stackoverflow.com/a/10069132/1835379),使其工作。要么以JSON形式返回数据,要么找到CORS问题的解决方法。 – Cerbrus

+0

但我得到一个响应,它包含我正在寻找的XML代码。有没有办法告诉我的webapp,响应是XML而不是jsonp? – doktormatte

相关问题