2010-11-08 6 views
8

UPDATE: Una volta esaminato il problema in Firebug, ho trovato immediatamente il mio errore. Ed è stata un'imbarazzante doppia citazione inequivocabile che devo aver cancellato in qualche modo. Stavo usando la finestra degli sviluppatori di Chrome. Molto dispiaciuto per aver usato le tue risorse. Ma, lezione imparata! ("Spero.)Come eseguire correttamente l'escape di html inviato come dati nella funzione .jax di jQuery

Qual è il modo migliore per me di caratteri di escape HTML che voglio inviare al mio server? Sto usando jQuery, .ajax(), e jsonp.

Sono . scrittura di un bookmarklet che invia parti del codice HTML della pagina corrente al mio server Ecco la chiamata AJAX:

jQuery.ajax({ 
    url: 'http://www.my_server.com/file.php?callback=?', 
    dataType: 'jsonp', 
    data: { someHtml: escape(jQuery(this).html().substring(0,1000)) }, 
    success: function() { // stuff }, 
    beforeSend: function(xhr) { 
        xhr.setRequestHeader('Content-type','text/html'); 
       }, 
    error: function() { // stuff } 
}); 

ho bisogno di usare JSONP e quindi non posso usare POST, e questo è il motivo per cui sto troncando i dati HTML. Le cose funzionano se l'html è "bello", ma se contiene caratteri non graditi da javascript, allora ho dei problemi. Ho risolto il problema con l'uso di escape(), ma ora penso di avere newline e scheda i problemi.

console dev di Chrome mi dà lo stesso errore:

Uncaught SyntaxError: Unexpected token < 

che presumo significa che qualche personaggio sta causando le cose di uscire di javascript. Ho provato il seguente: escape(), encodeURI/Component(), serialize(), text(), ma non ha funzionato ancora. All'inizio, non usavo beforeSend, ma pensavo di doverlo provare, ma nessuna differenza.

Attualmente, sono bloccato con un html che ha un'interruzione di riga, quindi una scheda, quindi un paio di spazi. Ho provato a sostituire questi caratteri utilizzando replace():

... .substring(0,1000).replace(/(\r\n|[\r\n])/g,'') 

Ho trovato questa stringa regex su un altro sito che dovrebbe sostituire varie combinazioni di ritorni a capo e avanzamenti di riga.

Spero di essermi spiegato abbastanza chiaramente. È la mia prima domanda a Stack Overflow quindi andate piano con me. :)

+1

+1 Molto buona prima domanda. – Marko

+0

Thx! Vorrei che non dovessi chiederlo però. Scuotere la testa contro il muro ... – SeanO

risposta

6

Non è necessario uscire o codificare. jQuery si occuperà correttamente della codifica URL dei dati:

data: { someHtml: $(this).html().substring(0, 1000) }, 
+0

Grazie Darin. Sembra che il mio problema sia legato a qualcosa di completamente diverso, ma non so cosa. Ho semplificato lo statememt in $ (this) .text() su un sito di test molto semplice e ho avuto lo stesso problema. Guardando dentro di più ora. – SeanO

+0

@SeanO, forse lo script sul lato server che stai postando disattiva alcuni caratteri speciali nella richiesta? Ad esempio questo è il caso di ASP.NET con cose come '<' and '>'. Potresti usare FireBug per analizzare cosa sta succedendo sotto le coperte. –

+0

Scuse a tutti. Questo è stato causato da un errore di sintassi assolutamente ridicolo (virgolette non chiuse) nel mio file php sul lato server. Otterrai subito l'evidenziazione della sintassi. – SeanO

Problemi correlati