从jQuery .ajax()问题调用Web服务

时间:2013-08-02 14:13:32

标签: javascript jquery ajax json web-services

我在调用跨域的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;
    }

有关如何使其正常工作的任何建议?谢谢! :)

2 个答案:

答案 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

希望这对你有用!