2012-04-12 8 views
17

Sto cercando di inviare il testo in coppie di valori chiave mentre faccio un post ajax contentType: "application/json; charset=utf-8", a un servizio web. Il problema che sto affrontando è che se uno dei parametri (che accetta il testo dall'utente) ha virgolette (") interrompe il codice [messaggio Eror: oggetto invalido passato]. Finora li ho provato senza alcun successoElimina tutti i caratteri speciali in una stringa inviata da jquery ajax

var text = $("#txtBody").val(); 
var output1 = JSON.stringify(text); 
var output2 = text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); 

Tutte le idee su come sfuggire i caratteri speciali per il posto jquery ajax?

risposta

29

Perché non utilizzare escape?

escape(text); 

https://developer.mozilla.org/en/DOM/window.escape

EDIT !!!!

Come menzionato nei commenti, questo è deprecato.

Il metodo escape() obsoleto calcola una nuova stringa in cui determinati caratteri sono stati sostituiti da una sequenza di escape esadecimale. Utilizzare invece encodeURI o encodeURIComponent.

Anziché utilizzare una delle seguenti opzioni:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

+0

Grazie Trevor :) – developer747

+1

Ho aggiunto una risposta, perché non è una buona pratica utilizzare il metodo di escape – zaynetro

+1

Obsoleto Questa funzione è stata rimossa dal Web. Sebbene alcuni browser possano ancora supportarlo, è in fase di rilascio.Non usarlo in progetti vecchi o nuovi. Le pagine o le app Web che lo utilizzano potrebbero interrompersi in qualsiasi momento. – Tester

2

esiste già una funzione di escape(var) che vi aiuta a fuggire i valori. dovrebbe essere sufficiente per lo scopo che si sta parlando

var output2 = escape(text); 
+0

La tua risposta ha funzionato per me Starx. Ma sfortunatamente non mi permettono di segnare più di una risposta. Spiacente :( – developer747

10

Per coloro che troveranno questa domanda: Non utilizzare il metodo di fuga che è stato rimosso dal Web Utilizzare encodeURIComponent() o encodeURI() invece
encodeURIComponent()
encodeURI()

+0

No, non usare mai encodeURI(), è inaffidabile e si basa su ipotesi. encodeURI indovina dove il nome e i valori dei dati iniziano e terminano in base ai caratteri '&' e '=' e tale ipotesi può essere errata. come esempio diretto, questo URL è codificato erroneamente da encodeURI: 'encodeURI (" http://example.org/?foo=i amo mia madre e mio padre ");' - qui foo dovrebbe essere "io amo mia madre e mio padre", ma encodeURI lo codifica per "I love my mother" - nel frattempo, encodeURIComponent fa 0 ipotesi, e funziona correttamente qui: "http://example.org/?foo="+encodeURIComponent("i amo mia madre e mio padre"); ' – hanshenrik

2

ho avuto lo stesso problema e per risolverlo, a cambiare il modo in cui mi stavo facendo la chiamata AJAX.

ho avuto qualcosa di simile

var datatosend = "Hello+World"; 

$.ajax({ 
    "type": "POST", 
    "data": "info=" + datatosend 

e informatica invia sul informazioni post = Ciao mondo, sostituendo il carattere +, con uno spazio vuoto.

Così ho trasformarla in una stringa JSON corretta

$.ajax({ 
    "type": "POST", 
    "data": {"info":datatosend}, 

e ora funziona. info = Hello + World

+0

Grazie, l'autoescaping funziona bene in questo caso. – Trinitron

Problemi correlati