我在我的页面中调用该方法:
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;
在调用JSON之后,firebug显示HttpRequest成功并且响应标头如下:
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
但问题是,不是done
回调,而是使用此结果调用fail
回调:
Object { readyState=4, status=404, statusText="error"}
我的通话未成功发送http请求有什么问题?
EDIT1。
我的网站(MyApp.Web)位于localhost:2771,而主叫服务位于localhost上的另一个项目(MyApp.WebApi)中:4143
答案 0 :(得分:1)
你肯定会遇到一些障碍,试图提出跨域请求。 That includes port-to-port
解决方案还取决于服务及其支持的功能。
JSONP(或带有填充的JSON)
该服务需要接受callback
并输出函数调用中包含的JSON:
// http://...?callback=completeRequest
completeRequest(["json", "data"]);
参数可以是与callback
不同的名称。但是,您可以通过包含占位符参数(...=?
)来指示jQuery使用它:
$.getJSON(serviceAddress + "?callback=?")
这也可以在任何浏览器中使用,因为它被<script src>
请求,而JSON将被解析为JavaScript literals。
该服务需要支持preflight, OPTIONS
requests并回复Access-Control-Allow-*
headers。
此外,在most current browsers support CORS期间,如果您需要支持旧版本,则可能会受到限制。
否则,您需要在应用程序(localhost:2771
)中创建一个代理目标,该目标使服务器(localhost:4143
)的跨源请求服务器端。
答案 1 :(得分:0)
它可能找不到您的目标页面,这就是您可能在结果对象中获得404的原因。确保您的serviceAddress正确无误。
除此之外当您指定:dataType: 'json'
如果无法将响应解析为JSON(无论200回复),jQuery将触发错误事件。确保从服务器返回的数据是有效的JSON,您可能希望通过JSONLint手动验证结构。
这可能是这两个问题中的任何一个。