我在调用跨域的Web服务时遇到问题。我在这里读过一些关于它的文章,但我并没有真正找到解决方案。我刚才知道我需要json
格式的数据,因为我在尝试从服务中获取Error: Access denied.
数据时总是得到xml
,但现在我遇到了另一个问题。这是我的.ajax()
电话:
$.ajax({
type: "GET",
contentType: "application/jsonp; charset=utf-8",
url: "http://tomas/_vti_bin/EmmaService.asmx/GetResult",
dataType: "jsonp",
data: {
value : "testValue",
converstionId : "testId"
},
success: function(resp) {
alert("success: " + resp);
},
error: function (xhr, ajaxOptions, thrownError) {
alert("error status: " + xhr.status);
alert("error status text: " + xhr.statusText);
alert("error response text: " + xhr.responseText);
},
});
从此我得到3个以下警告的错误:
error status: 200
error status text: success
error response text: undefined
我不明白的是error status text: success
。
我的网络服务中的代码:
[WebMethod(EnableSession = false, Description = "Gets result")]
public EmmaServiceResult GetResult(string value, string converstionId)
{
...
return result;
}
有关如何使其正常工作的任何建议?谢谢! :)
答案 0 :(得分:2)
尝试在网址末尾添加?callback=?
:
http://tomas/_vti_bin/EmmaService.asmx/GetResult?callback=?
另外,尝试查看thrownError以确定错误:
alert("error response text: " + thrownError);
它可能是解析错误等等。与ajax请求实际上没有关系的东西,但是你如何定义应该如何处理响应。
另外,查看here以了解如何从WCF服务返回json。
[WebInvoke(Method = "GET",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "players")]
答案 1 :(得分:0)
我最近在处理AJAX调用的跨域请求时遇到了很多问题。我们最终无需修改API就可以使用它,但我们确实需要访问托管API的服务器,因此我们可以让它在响应中发送一些标头。但整个问题是调试的痛苦,我发现所有浏览器都很难报告有意义的错误。因此,如果这不能解决您的问题,这可能对您不起作用并提前道歉。
该解决方案要求您发出CORS请求,并在服务器响应中添加一些标头。这些页面都是很好的资源:
https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS http://www.html5rocks.com/en/tutorials/cors/
我认为在您的情况下,由于您正在提出基本请求并且您没有处理Cookie,因此您可以将.ajax调用基本保持不变,只需将dataType更改为“json”,将contentType更改为“application / json” “如果你要发送JSON。
然后,您必须通过将这些标头添加到响应中来修改服务器以使其处理CORS预检请求:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET
Access-Control-Allow-Headers: Content-Type
(见这个问题:jQuery CORS Content-type OPTIONS)
希望这对你有用!