1

I'm calling the method in my page:

var dfd = $.Deferred(
    $.getJSON(serviceAddress)
        .done(function (result, status) {
            bo.BusinessObject.DtosToaKoArray(result, resultList);
            dfd.resolve(resultList);
        })
        .fail(function (result, status) {
            logger.logError(result);
            dfd.reject(result);
        }));

return dfd; 

After calling the JSON, the firebug shows that HttpRequest was successfull and the response header is like:

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?RDpcV29ya3NwYWNlc1xNZWhyYW5cSW5mcmFzdHJ1Y3R1cmVcTWFpblxTb3VyY2VcSW5mcmFzdHJ1Y3R1cmVcU291cmNlXENhcmFuZS5HYWxheHkuV2ViQXBpXGFwaVxEYXRhUHJvdmlkZXJcTGlzdFNlcnZpY2Vc?=
X-Powered-By: ASP.NET
Date: Sun, 04 Aug 2013 05:57:39 GMT
Content-Length: 6684

but the problem is that instead of done callback, the fail callback is called with this result:

Object { readyState=4, status=404, statusText="error"}

What is wrong about my call that fails the successful http request?

Edit1.

My website (MyApp.Web) is on localhost:2771 and the calling service is in another project (MyApp.WebApi) on the localhost:4143

4

2 回答 2

1

你肯定会在尝试提出跨域请求时遇到一些障碍。这包括端口到端口

解决方案还取决于服务及其支持的功能。

  • JSONP(或,带填充的 JSON)

    该服务需要接受callback并输出包装在函数调用中的 JSON:

    // http://...?callback=completeRequest
    completeRequest(["json", "data"]);
    

    参数的名称可以不同于callback. 但是,您可以通过包含占位符参数 ( ...=?) 来指示 jQuery 使用它:

    $.getJSON(serviceAddress + "?callback=?")
    

    这也可以在任何浏览器中使用,因为它被请求为 a<script src>并且 JSON 将被解析为JavaScript 文字

  • CORS

    该服务将需要支持预检、OPTIONS请求和响应Access-Control-Allow-*headers

    此外,虽然大多数当前浏览器都支持 CORS,但如果您需要支持旧版本,这可能会受到限制。

否则,您需要在应用程序 ( localhost:2771) 中创建一个代理目标,以将跨域请求服务器端发送到服务 ( localhost:4143)。

于 2013-08-04T07:24:43.600 回答
0

它可能找不到您的目标页面,这就是您可能在结果对象中得到 404 的原因。确保您的 serviceAddress 正确。

除此之外,当您指定时:dataType: 'json'如果无法将响应解析为 JSON(尽管有 200 回复),jQuery 将触发错误事件。确保从服务器返回的数据是有效的 JSON,您可能希望通过JSONLint手动验证结构。

这可能是这两个问题中的任何一个。

于 2013-08-04T06:51:18.960 回答