2011-03-10 17 views
5

Ho questo codice (sotto) ..Jquery codifica dei dati ajax

$.ajax 
({ 
    type: "POST", 
    url: "../WebServices/Feedback.svc/sendfeedback", 
    dataType: 'json', 
    async: false, 
    data: '{"stars": "' + stars + '", "rating" : "' + rating + '", "note" : "' + encodeURIComponent(note) + '", "code" : "' + code + '", "permission" : "' + permission + '"}', 
    contentType: "application/json; charset=utf-8" 
}); 

Sto usando questo per passare nei dati a un servizio Web, ma il problema è se ci sono personaggi in là come questo (, /?: @ & = + $ #). Ho inserito un componente encodeURIC che funziona bene e poi nel servizio Web li ho reinseriti.

Quello che sto chiedendo è se c'è un modo migliore per realizzare questo? Sembra un po 'folle che ho per codificare la stringa ogni volta prima di passarlo attraverso ..

Grazie

+0

Perché sembra pazzesco? non è normale trasferire i dati in sicurezza? – yoavmatchulsky

+0

Quindi quello che stai dicendo è che questi personaggi non sono sicuri di passare a un servizio web? Che danno potrebbero fare? – tmutton

+2

$ .ajax farà comunque la codifica automaticamente, non è vero? –

risposta

4

è il servizio web appartengono a voi o si usa qualcun altro servizio web? Qual è stato il motivo per cui il servizio web non accetta (, /?: @ & = + $ #)?

jQuery $ .ajax contentType default è application/x-www-form-urlencoded che significano jQuery codificherà il contenuto. Tuttavia, poiché hai specificato contentType diverso, i dati non sono codificati, quindi devi eseguire la tua codifica.

In alternativa, si potrebbe tentare di rimuovere l'opzione contentType e passare nel contenuto normalmente (senza encodeURICompnent).

$.ajax 
({ 
    type: "POST", 
    url: "../WebServices/Feedback.svc/sendfeedback", 
    dataType: 'json', 
    async: false, 
    data: '{"stars": "' + stars + '", "rating" : "' + rating + '", "note" : "' + note + '", "code" : "' + code + '", "permission" : "' + permission + '"}', 
}); 
+0

L'ho appena testato e non sembra funzionare .. Ho provato esattamente il codice precedente (senza contentType) e ho passato una stringa contenente i caratteri (, /?: @ & = + $ #) e ancora nessuna gioia. qualche idea? – tmutton

+0

Il problema ora non sono i caratteri speciali, ma newline o restituisce. Se inserisco una riga di ritorno nel testo non viene pubblicato nel servizio web. C'è una soluzione rapida per questo? – tmutton

+0

Quindi hai corretto i caratteri speciali, bene. Senza vedere il codice non posso essere così sicuro di cosa causi la mancata pubblicazione sul tuo servizio web. Prova questo, attiva Net Panel (con Firebug, sotto la scheda ** Net **) e fai la richiesta ajax, vedi qual è il codice di errore restituito dal server. – suhendri

10

dati passare attraverso come un oggetto invece di una stringa:

$.ajax 
({ 
... 
data: {stars: stars, rating: rating...(etc)} 
}); 
+0

Questo ha funzionato per me. Se avessi usato una stringa di query per i dati e ci fosse un + dentro, sarebbe diventato uno spazio quando il mio servlet l'avrebbe recuperato, anche se non avevo cambiato il contentType in modo che avrebbe dovuto codificarlo. Quando cambio questo metodo sopra, il mio servlet vede il + correttamente nei dati. – mikato