2009-07-03 37 views
21

Estoy usando jQuery para hacer una POST a un archivo PHP con el contenido HTML de un div. El contenido HTML contiene tablas, entradas, divs más pequeños y me gustaría tomar el contenido del DIV principal y enviarlo a la base de datos. La única opción que se me ocurre es el método POST, pero no sé si puedo enviar HTML simple con él. ¿Hay alguna otra opción para enviar contenido HTML de un div a un archivo PHP para insertarlo en MySQL?jQuery enviar datos HTML a través de POST

Gracias.

EDIT: Ahora puedo enviar datos HTML completos con la POST de jQuery. Sin embargo, mis caracteres HTML de ese DIV se transforman en caracteres especiales. Ejemplo: ">" se convertiría en "& gt;" y cuando eso sucede, mis datos POST se limita a donde el primer carácter especial aparece porque hago mi post ajax así:

var data = 'id='+ currid +'&html='+ div_html; 

    $.ajax({ 
      type: "POST", 
      url: "file.php", 
      data: data, 
    ....................... 
    ....................... 

Utilizando este código no es aceptable porque div_html contiene otros "&" personajes por lo que sería ser considerado como otro parámetro POST que se enviará.

¿Alguna solución alternativa?

Gracias de nuevo.

Respuesta

44

Por lo que a usted respecta, una vez que haya "sacado" el contenido con algo como .html() es solo una cadena. Se puede comprobar que con

<html> 
    <head> 
    <title>runthis</title> 
    <script type="text/javascript" language="javascript" src="jquery-1.3.2.js"></script> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      var x = $("#foo").html(); 
      alert(typeof(x)); 
     }); 
    </script> 
    </head> 
    <body> 
     <div id="foo"><table><tr><td>x</td></tr></table><span>xyz</span></div> 
    </body> 
</html> 

El texto de alerta es cadena. Siempre y cuando no lo pases a un analizador no hay magia al respecto, es una cadena como cualquier otra cadena.
No hay nada que le impida usar .post() para enviar esta cadena de vuelta al servidor.

edición: No pasa una cadena como parámetro datos a .post() sino un objeto, como

var data = { 
    id: currid, 
    html: div_html 
}; 
$.post("http://...", data, ...); 

jQuery se encargará de la codificación de los parámetros.
Si (por algún motivo) desea conservar su cadena, debe codificar los valores con algo como escape().

var data = 'id='+ escape(currid) +'&html='+ escape(div_html); 
+0

Pregunta original editada. –

+0

Original answer expandido – VolkerK

+0

¡Gracias! Funciona muy bien. –

1

No veo por qué no debería poder enviar contenido html a través de una publicación.

si surge algún problema, quizás pueda utilizar algún tipo de codificación/decodificación, pero no veo que lo haga.

+0

pregunta original editado. –

1

Si desea enviar una cantidad arbitraria de datos a su servidor, POST es el único método confiable para hacerlo. GET también sería posible, pero los clientes y servidores permiten solo una longitud de URL limitada (algo así como 2048 caracteres).

+0

Pregunta original editada. –

0

jQuery.post(post_url,{ content: "John" }) 
 
\t .done(function(data) { 
 
\t \t 
 
\t \t 
 
\t }); 
 

he utilizado la técnica de lo que u han respondido anteriormente, funciona bien, pero mi problema es que necesito para generar un PDF utilizando conent John como texto. He podido hacer eco de los datos pasados.pero conseguir vacía en la hora de generar pdf uisng continuación ples comprobación de contenido

ob_start(); 
 
\t \t \t \t \t \t 
 
\t \t \t include_once(JPATH_SITE .'/components/com_gaevents/pdfgenerator.php'); 
 
\t \t \t $content = ob_get_clean(); 
 
\t \t \t 
 
\t \t 
 
\t \t 
 
\t \t \t $test = $_SESSION['content'] ; 
 
\t 
 
\t \t \t require_once(JPATH_SITE.'/html2pdf/html2pdf.class.php'); 
 
      $html2pdf = new HTML2PDF('P', 'A4', 'en', true, 'UTF-8',0); \t \t \t 
 
\t \t \t \t $html2pdf->setDefaultFont('Arial'); 
 
\t \t \t \t $html2pdf->WriteHTML($test);

Cuestiones relacionadas