2009-06-01 15 views
9

Ho il seguente ma non funziona, ho letto da qualche parte sullo stackoverflow che funziona così ma non riesco a farlo funzionare .. errori ... sto facendo qualcosa di sbagliato?Passare js oggetto come json a jquery?

Se faccio passare i dati come questo - funziona - quindi so che il mio servizio sta funzionando

//THIS WORKS 
data: "{one : 'test',two: 'test2' }" 


// BUT SETTING UP OBJECT doesn't work.. 

var saveData = {}; 
saveData.one = "test"; 
saveData.two = "tes2"; 


$.ajax({ 
    type: "POST", 
    url: "MyService.aspx/GetDate", 
    data: saveData, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
     alert(msg.d); 
    }, 
    error: function(msg) { 
    alert('error'); 
    } 

}); 
+0

Qual è l'errore? – cgp

+0

Come notato nella risposta di Matt Winckler, il problema non si trova nella gestione di jQuery dell'oggetto che gli viene dato (fa la cosa prevista) - ma apparentemente i servizi .NET si aspettano che il JSON sia una stringa che può analizzare sul lato server . Includere una libreria per il rigoroso scopo di stringificare l'oggetto è mooolto inutile in questo caso. –

+0

Non c'è molto danno nell'includere il ~ 2kb (prima di gzip) json2.js nel pacchetto di JavaScript incluso. Il supporto nativo del browser che arriva in browser come Firefox 3.5 imita anche i metodi di json2.js, quindi l'utilizzo della sua API è una buona pratica per il futuro. –

risposta

21

Credo che il codice sta per chiamare .value o .toString() sul vostro oggetto e poi passare sul filo. Vuoi passare JSON.

Così, includono il JSON libreria javascript

http://www.json.org/js.html

E poi passare ...

var saveData = {}; 
    saveData.one = "test"; 
    saveData.two = "tes2"; 


    $.ajax({ 
     type: "POST", 
     url: "MyService.aspx/GetDate", 
     data: JSON.stringify(saveData),  // NOTE CHANGE HERE 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(msg) { 
      alert(msg.d); 
     }, 
     error: function(msg) { 
     alert('error'); 
     } 

    }); 
+0

grazie .. questo ha funzionato alla grande .... grazie .. –

+0

o $ .param (saveData) – Plattsy

3

Secondo this blog post, il motivo per cui non funziona quando si tenta di passare il l'oggetto è che jQuery tenta di serializzarlo. Da posta:

Invece di passare tale oggetto JSON attraverso al servizio Web, jQuery sarà serializzare e inviarlo come automaticamente:

fname=dave&lname=ward 

Al che, il server risponderà con:

Invalid JSON primitive: fname. 

Questo chiaramente non è quello che vogliamo che accada. La soluzione è assicurarsi di passare a jQuery una stringa per il parametro [...]

Quale è quello che stai facendo nell'esempio che funziona.

3

Il mio suggerimento sarebbe quello di utilizzare il jquery-json plug-in e poi si può solo fare questo nel codice:

... 
data: $.toJSON(saveData), 
... 
Problemi correlati