使用JQuery Ajax和JSONP调用OData服务

我正在尝试使用JQuery $ .ajax调用OData服务并遇到一些问题。

当我使用dataType:“jsonp”调用服务时,我得到状态代码200和我需要的数据,但它属于我的JQuery错误:函数(数据)

当我使用dataType:“json”调用服务时,我什么都没得到,甚至没有发生对服务的调用。

这是我的.ajax电话:
$.ajax({ beforeSend: function(request) { request.setRequestHeader("Accept", "application/json;charset=utf-8"); }, type: "GET", url: this.uri + filter, dataType: "jsonp", success: function(data) { // I never get here but in fiddler I get a 200 status code }, error: function(data) { // This works and gives me the data but it's in the JQuery error handler // $.parseJSON(data.responseText) } });
我尝试了几种变体“jsonp:false”,“callback”等,但没有成功。 我还应该提到网站和odata webapi在同一台服务器上,但网站是通过https访问的,然后客户端ajax通过http调用服务。

谁能告诉我哪里出错了?

提前致谢!

你很可能正在调用已经支持CORS的OData服务。 这意味着您无需在请求中指定使用JSONP。 如果您获得的状态代码为200的响应具有标题“Access-Control-Allow-Origin:xxx”,您可能正在谈论此类服务。

尝试简单地使用以下ajax调用:

 $.ajax({ type: "get", async: false, url: "http://services.odata.org/V4/OData/OData.svc/Products", success: function (data) { alert(JSON.stringify(data)); }, error: function (xhr, textStatus, errorMessage) { alert(errorMessage); } }); 

您可以在警报窗口中查看数据。

经过无数个小时的努力,我终于通过跳过JQuery并使用xmlhttprequest对象来实现它,这是我的工作代码:

var uri = this.uri + filter;

 var http_request = new XMLHttpRequest(); http_request.setRequestHeader("Authorization", "Negotiate"); http_request.onreadystatechange = function() { if (http_request.readyState == 4 ) { var data = JSON.parse(http_request.responseText); alert(data.value[0].Name); } } http_request.open("GET", uri, true); http_request.send(); 

我从网上的任何地方借来的东西,所以其他人值得信任。

这是在仅运行IE的本地Intranet上使用,如果有人有其他建议我可以尝试或更好的方式这样做我将非常感谢您的反馈。

谢谢!