浏览器响应大小限制

时间:2009-11-29 07:29:43

标签: jquery json getjson

我通过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。

3 个答案:

答案 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有一个更大的限制,但不是无限的。

http://support.microsoft.com/kb/208427

答案 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);
}