Pergunta

Eu estou chamando meu serviço web de domínio cruzado através de uma chamada getJson () do jQuery. Como o meu tamanho objeto de resposta é muito grande, eu usei o tamanho máximo JSon para o meu web-service. Fui verificar getJson () está dando objeto de resposta adequada. Mas ainda assim a minha função de retorno não é chamado. Firebug está dizendo que é (firefox) tamanho da resposta é excedido.

Alguém pode dizer-me o que é o limite de tamanho máximo de resposta navegador que o navegador padrão por exemplo (Firefox, IE) pega e como lidar com o problema?

Aqui está o trecho de código para o mesmo.

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

qualquer ajuda será muito apreciada.

Graças Subrat.

Foi útil?

Solução

Ive sido através desta vez em um projeto, e que me lembro foi que o IE tem um limite de 2083 caracteres para ambos GET e POST solicitações. FF tem um limite maior, mas não ilimitado.

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

Outras dicas

Uma coisa que parece meio estranho é a função de retorno:

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

Uma vez que você estiver usando JSONP (devido ao pedido sendo cross-domain) o serviço de responder deve retornar um JavaScript como:

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

Assim, o arg argumento é o objeto real JavaScript. Você não precisa stringify e depois eval-lo. Simplesmente usá-lo como ele é, ou seja:.

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

Muito tempo atrás eu postei sobre a funcionamento interno do JSONP no meu blog se você estiver interessado em mais detalhes.

Talvez você quer que seu $.getJSON parte olhar o seguinte:

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

// Or more simply

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

Alguns mais informações sobre apply: MDN Docs


UPDATE: Antes que você também poderia alterar a função getResponse a:

function getResponse() {
    var localService = new getServiceProxy("SearchData.asmx");
    localService.invoke('Search', '', successcall);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top