2010-11-08 14 views
8

ACTUALIZACIÓN: Una vez que miré el problema en Firebug, encontré mi error inmediatamente. Y fue una vergonzosa cita doble incomparable que debí haber borrado de alguna manera. He estado usando la ventana de desarrollador de Chrome. Lo siento mucho por usar tus recursos. Pero, ¡lección aprendida! ("Espero.)Cómo escaparse correctamente html enviado como datos en la función .ajax de jQuery

Cuál es la mejor manera para que los caracteres de escape HTML que quiero enviar a mi servidor? Estoy usando jQuery, .ajax(), y jsonp.

estoy . escribiendo un bookmarklet que envía partes de hTML de la página actual a mi servidor Aquí está la llamada 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 } 
}); 

necesito utilizar JSONP y por lo tanto no puedo usar POST, y es por eso que estoy truncando los datos html. Las cosas funcionan si el html es "bueno", pero si contiene caracteres que a javascript no le gustan, entonces tengo problemas. Solucioné mi problema usando escape(), pero ahora creo que estoy teniendo nueva línea y pestaña problemas.

consola dev de Chrome me da el mismo error:

Uncaught SyntaxError: Unexpected token < 

que supongo que significa que algunos caracteres está causando cosas que estallan de JavaScript. He intentado lo siguiente: escape(), encodeURI/Component(), serialize(), text(), pero nada ha funcionado todavía. Al principio, no usé BeforeSend, pero pensé que debería probarlo, pero no hubo diferencia.

Actualmente, estoy atascado con algunos html que tienen un salto de línea, luego una pestaña, luego un par de espacios. He intentado reemplazar estos caracteres utilizando replace():

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

Me encontraron esta expresión regular en otro sitio que se supone para reemplazar varias combinaciones de retornos de carro y avances de línea.

Espero haber explicado con suficiente claridad. Es mi primera pregunta en Stack Overflow así que no me molestes. :)

+1

+1 Muy buena primera pregunta. – Marko

+0

¡Thx! Ojalá no tuviera que preguntarlo sin embargo. Golpeando la cabeza contra la pared ... – SeanO

Respuesta

6

No necesita escaparse ni codificar. jQuery se ocupará de la codificación URL de los datos correctamente:

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

Gracias Darin. Parece que mi problema está relacionado con algo completamente diferente, pero no sé qué. Simplifiqué statememt a $ (this) .text() en un sitio de prueba muy simple y tuve el mismo problema. Mirándolo más ahora. – SeanO

+0

@SeanO, ¿tal vez el script del lado del servidor en el que está publicando no permite incluir algunos caracteres especiales en la solicitud? Por ejemplo, este es el caso de ASP.NET con cosas como '<' and '>'. Puede usar FireBug para analizar lo que sucede debajo de las cubiertas. –

+0

Disculpas a todos. Esto fue causado por un error de sintaxis completamente ridículo (citas no cerradas) en mi archivo php del lado del servidor. Vamos a configurar el resaltado de sintaxis de inmediato. – SeanO

Cuestiones relacionadas