我通过jQuery的getJson()调用来调用我的跨域Web服务。由于我的响应对象大小非常大,我使用了最大的JSon大小来支持我的Web服务。我检查了getJson()是否给出了正确的响应对象。但仍然没有调用我的回调函数。 Firebug说它超过了(firefox)响应大小。
有人能告诉我标准浏览器的最大浏览器响应大小限制,例如(firefox,ie)处理以及如何处理问题吗?
以下是相同的代码段。
//Wrapper call to the actual getJson call
function getResponse() {
var localService = new getServiceProxy("SearchData.asmx");
localService.invoke("Search", "", "successcall");
}
//getJson call
function getServiceProxy(serviceUrl) {
var _I = this;
this.serviceUrl = serviceUrl;
// *** Call a wrapped object
this.invoke = function(method, data, callback, error) {
if (data == "") {
var url = _I.serviceUrl + "/" + method + "?output=json&callback=?";
}
else {
url = _I.serviceUrl + "/" + method + "?" + data + "&output=json&callback=?";
}
$.getJSON(url, function(arg) {
var evalstr = callback + "(" + JSON.stringify(arg) + ");";
eval(evalstr);
});
}
}
//success callback function
function successcall(multiSearchResponse) {
//use the response.
}
任何帮助都将受到高度赞赏。
谢谢Subrat。
答案 0 :(得分:0)
有一点看起来很奇怪的是回调函数:
$.getJSON(url, function(arg) {
var evalstr = callback + "(" + JSON.stringify(arg) + ");";
eval(evalstr);
});
由于您使用的是JSONP(由于请求是跨域的),响应服务应返回类似以下的JavaScript:
jQueryGeneratedUniqueCallbackName12345({my: 'data', foo: 'bar'});
所以 arg 参数是实际的JavaScript对象。你不应该需要字符串化然后评估它。只需按原样使用,即:
$.getJSON(url, function(data) {
console.log(data.foo);
});
很久以前,如果您对更多细节感兴趣,我会在我的博客上发布inner workings of JSONP。
答案 1 :(得分:0)
我曾在一个项目中经历过这一次,我记得IE对POST和GET请求的限制为2083个字符。 FF有一个更大的限制,但不是无限的。
答案 2 :(得分:0)
也许您希望$.getJSON
部分看起来如下:
$.getJSON(url, function(arg) {
callback.apply(null, JSON.stringify(arg));
});
// Or more simply
$.getJSON(url, function(arg) {
callback(JSON.stringify(arg));
});
有关apply
的更多信息:MDN Docs
更新:在此之前,您还可以将getResponse
功能更改为:
function getResponse() {
var localService = new getServiceProxy("SearchData.asmx");
localService.invoke('Search', '', successcall);
}