1

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

关于如何使它工作的任何建议?谢谢!:)

4

2 回答 2

2

尝试添加?callback=?到 URL 的末尾:

http://tomas/_vti_bin/EmmaService.asmx/GetResult?callback=?

另外,尝试查看 throwedError 以确定错误是什么:

alert("error response text: " + thrownError);

这可能是解析错误等。实际上与 ajax 请求无关,而是您如何定义应如何处理响应。

此外,请查看此处了解如何从 WCF 服务返回 json。

[WebInvoke(Method = "GET",
           RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json,
           UriTemplate = "players")]
于 2013-08-02T14:19:29.633 回答
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 内容类型选项

希望这对你有用!

于 2013-08-02T17:25:36.713 回答