2013-03-11 17 views
10

Mi sono imbattuto in un piccolo problema. Ricevo una risposta JSON che include un array di byte con 67615 voci. Ora ben si aggiunge unJquery suddivide enorme array in molti nuovi callback mentre analizza

`[....,154,156,);jQuery1910039778258679286416_1363006432850(181,104,...] 

ogni ~ 7300 caratteri

Ora, quando io uso il metodo ajax per analizzarlo come funziona normalmente mi dà un errore perché i callback invalidano la risposta SyntaxError: manca ] dopo elenco di elementi

..., 184,1,26,65,140,86,211,16,194,210,174,1); jQuery17203250109862964784_13639643449 ...

quindi non è più valido

Io lo uso per analizzarlo

$.ajax({ 
    url : url, 
    cache : false, 
    dataType : "jsonp", 
    crossDomain : true, 
    success : function(root) { 
     console.log(root) 

    } 
}) 

Questo potrebbe essere un problema con il server asp dandomi l'oggetto o c'è qualcosa di sbagliato con l'analisi?

Grazie in anticipo

Edit1:

[WebMethod(Description = " ", EnableSession = true)] 
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] 

public Borrower getSessionedBorrowerHeader(ref sysmessage aMessage) 
{ 
    if (!(userValidated(ref aMessage))) 
     return null; 
    BorrowerControl borrowerControl = new BorrowerControl(LOCALconnectionStringDb, 
                  WEBconnectionStringDb, 
                  STATSconnectionStringDb, 
                  LIBconnectionStringDb, 
                  CATconnectionStringDb, 
                  LIBconnectionStringDb, 
                  Session); 
    Borrower returnObj = borrowerControl.getSessionedBorrowerHeader(ref aMessage); 
    borrowerControl.Dispose(); 
    return returnObj; 
} 

se avete bisogno di più il codice dirmi Im non in ASP :(

EDIT2:

http://pastebin.com/e3X2VKxY

Cosa do :( Ecco la JSON ans wer

+0

Cosa sta generando il JSON? Sta succedendo alle interruzioni di linea? – Blazemonger

+0

il Json viene generato dal server asp.net che gira qui se chiamo qualche oggetto senza il bytearray funziona bene solo il bytearray lo fa fallire anche se l'array è semplicemente dati. Il JSON viene serializzato da .NET da solo utilizzando ResponseFormat = ResponseFormat.Json –

+1

Sembra che ASP stia rompendo la risposta in più callback. Puoi usare javascript nativo per fare la richiesta jsonp e ricevere tutte quelle callback, ma se vuoi che jQuery lo gestisca, devi averlo non dividerlo. –

risposta

0

Secondo la documentazione jQuery, è possibile impostare il nome del callback jsonp, per salvare i byte nel tuo caso: jsonpCallback

function J() { ... } 
$.ajax({ 
    url : url, 
    cache : false, 
    dataType : "jsonp", 
    jsonpCallback : "J", 
    crossDomain : true, 
    success : function(root) { 
     console.log(root) 
    } 
}) 
+0

Dubito che questo ridurrà 67k voci fino a 7,3k caratteri o meno –

+0

Puoi fornire la risposta JSON completa, o almeno qualcosa che sia strutturalmente equivalente? –

+0

@ T.W.R.Cole fatto –

1

Questo suona come un fattore limitante ASP. Questo non è jQuery specifico, ma per qualsiasi risposta JSON dal server ASP. L'ho visto anche sui server ColdFusion. Trova questa impostazione e verifica se il limite è correlato al limite che hai raggiunto. Vedi se puoi aumentarlo per quello che ti serve.

<system.web.extensions> 
    <scripting> 
     <webServices> 
      <jsonSerialization maxJsonLength="x"></jsonSerialization> 
     </webServices> 
    </scripting> 
</system.web.extensions> 

Se non si ha accesso alle impostazioni del server, potrebbe essere possibile impostare il valore nel codice. Qui è un riferimento MSDN per questo:

http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.maxjsonlength.aspx

Essa afferma anche lì:

The maximum length of JSON strings. The default is 2097152 characters, which is equivalent to 4 MB of Unicode string data.

Questo è il modo sopra la vostra lunghezza del ~ 7300 caratteri. Ma forse qualcuno ha regolato questa impostazione.

Sono anche curioso di vedere "più" restituisce al metodo di richiamata. Normalmente, penso, questo limite troncerà semplicemente il risultato del primo risultato di callback. Forse hai anche qualcos'altro in corso?

Problemi correlati