Browser response size limit

别说谁变了你拦得住时间么 提交于 2019-11-28 10:32:31

问题


I am calling my cross domain web-service through a getJson() call from jQuery. As my response object size is pretty big, i have used the maximum JSon size for my web-service. I have checked getJson() is giving proper response object. But still my callback function is not called. Firebug is saying that it's(firefox) response size is exceeded.

Can anybody tell me whats the maximum browser response size limit that the standard browser e.g (firefox, ie) handle and how to deal with the problem?

Here is the code snippet for the same.

 //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.
 }

any help will be highly appreciated.

Thanks Subrat.


回答1:


Ive been through this once in a project, and what I recall was that IE has a limit of 2083 characters for both POST and GET requests. FF has a larger limit, but not limitless.

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




回答2:


One thing that looks kind of weird is the callback function:

 $.getJSON(url, function(arg) {       
     var evalstr = callback + "(" + JSON.stringify(arg) + ");";
     eval(evalstr);
 });

Since you are using JSONP (due to the request being cross-domain) the responding service should return a JavaScript like:

jQueryGeneratedUniqueCallbackName12345({my: 'data', foo: 'bar'});

So the arg argument is the actual JavaScript object. You should not need to stringify and then eval it. Simply use it as it is, i.e.:

 $.getJSON(url, function(data) {       
     console.log(data.foo);
 });

Quite a while ago I posted about the inner workings of JSONP on my blog if you are interested in more details.




回答3:


Maybe you want your $.getJSON part look as follows:

$.getJSON(url, function(arg) {       
    callback.apply(null, JSON.stringify(arg));
});

// Or more simply

$.getJSON(url, function(arg) {       
    callback(JSON.stringify(arg));
});

Some more info about apply: MDN Docs


UPDATE: Before that you could also change the getResponse function to:

function getResponse() {
    var localService = new getServiceProxy("SearchData.asmx");
    localService.invoke('Search', '', successcall);
}


来源:https://stackoverflow.com/questions/1814913/browser-response-size-limit

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!