2009-11-29 145 views
1

我通過jQuery的getJson()調用來調用我的跨域Web服務。由於我的響應對象大小非常大,我已經使用了我的Web服務的最大JSon大小。我檢查過getJson()是否給出了正確的響應對象。但是我的回調函數仍然沒有被調用。 Firebug說它超過(firefox)響應大小。瀏覽器響應大小限制

任何人都可以告訴我最大瀏覽器響應大小限制標準瀏覽器例如(火狐,即)處理和如何處理該問題?

以下是相同的代碼片段。

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

我曾經在項目中經歷過這一次,我記得IE瀏覽器對GET和GET請求的限制爲2083個字符。 FF有一個更大的限制,但不是無限的。

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

+0

POST應該沒有長度限制,否則文件上傳將是不可能的。另一方面,GET具有約2k的限制。 – 2012-01-19 20:22:07

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,如果你有興趣瞭解更多的細節,即:。

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


UPDATE:而在此之前,你也可以改變getResponse函數爲:

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