jQuery $ .post - JSON - forma correcta de enviar / recibir datos de entrada (en el lado del cliente solamente) - Un Dos preguntas de Quest

StackOverflow https://stackoverflow.com/questions/3546661

  •  30-09-2019
  •  | 
  •  

Pregunta

Imaginemos que tenemos algo así como Let:

$.post('somescript.php', 'WHAT CAN WE PUT HERE?',
        function(replyData) {

1) Por defecto, el tercer argumento del método $ .post, leerá la respuesta correcta XMLResponse? Así que, ¿por qué necesitamos que el argumento de replyData '? ¿Cuáles son las razones que tenga para tener ese argumento?

2) La segundo argumento acepta los datos que serán enviados. Okay. Me gustaría utilizar JSON, sin embargo, no estoy seguro de si debo utilizar un formato JSON en ese segundo argumento o apuntar el campo de formulario de entrada que contendrá los datos?

Notas adicionales: Los datos provendrá de un campo de entrada, y tengo que enviarlo a través de una petición AJAX $ .post al servidor. Tengo la intención de utilizar JSON codificar y decodificar json php funciones.

Gracias de antemano, MEM

¿Fue útil?

Solución

El argumento replyData contiene el cuerpo de la respuesta devuelta por el servidor, que luego se puede manipular para mostrar en su página, verificar que el lado del servidor procesa los datos con éxito, etc Usted no tiene que usarlo ( por ejemplo, si no devuelve ningún dato).

Los datos que se está suministrando (en formato JSON), todavía tendrá que ser en forma de una cadena de consulta, por ejemplo, param=value. El valor que también será necesario codificar adecuadamente, utilizando encodeURIComponent () :

$.post('somescript.php', 'data='+encodeURIComponent(myJSON),
    function(replyData) {

A continuación, se puede acceder al JSON en el script PHP a través de la $ _POST superglobal:

$data = json_decode($_POST['data']);

JSON sería un poco excesivo para un campo de entrada simple, sin embargo. Es infrecuente utilizar JSON en lugar de pares de nombre / valor para los campos del formulario.

Otros consejos

1) El tercer argumento es la función de devolución de llamada. Si proporciona una función anónima, como en la muestra, es necesario nombrar el argumento para acceder a ella. Si devuelve una estructura JSON, que puede entonces tener acceso replyData.foo etc.

2) Puede tirar de los valores de su forma y construir una estructura JSON.

var data = {};
data.threadid = $(form).find('input[name=threadid]').val();
data.commentid = $(form).find('input[name=commentid]').val();

$.post('somescript.php', data, function(replyData) { alert(replyData.foo); } );

Me robó esta función desde Drupal y fija la coma final en arrays y objetos wich causó Zend_Json_Server para lanzar excepciones.

    var toJson = function(v) {
  // typeof null == object so we check beforehand;
  if ( v == null ){
    return null;  
  }

  switch (typeof v) {
    case 'boolean':
      return v == true ? 'TRUE' : 'FALSE';
    case 'number':
      return v;
    case 'string':
      return '"'+ v +'"';
    case 'object':
      if ( !(v instanceof Array) ){
          var output = "{";
          for(i in v) {
            output = output + '"'+i+'"' + ":" + toJson(v[i]) + ",";
          }
          output = output.substr(0,output.length-1) + "}"; // Fix the trailing comma error wich isn't officialy allowed.
      }else{
          var output = "[";
          for(i in v) {
            output = output + toJson(v[i]) + ",";
          }
          output = output.substr(0,output.length-1) + "]"; // Fix the trailing comma error wich isn't officialy allowed.
      }
      return output;
    default:
      return null;
  }
}

Ahora solo alimentan sus datos de esta manera:

var myJsonString = toJson($('myform').serialize());

Wich devolverá una cadena JSON de forma recursiva generado a partir de la variable. Que funciona para la mayoría de mis aplicaciones.

En general estoy de acuerdo con Andy E que si nos fijamos en el cadena de datos que serán publicados que debería parecerse

'data='+encodeURIComponent(myJSON)

Quiero sólo para aclarar, que en la práctica un uso el segundo parámetro de $ .post su mayoría no como una cadena:

$.post('somescript.php', 'data='+encodeURIComponent(myJSON), ... );

pero como un objeto:

$.post('somescript.php', {data: myJSON}, ...);

función Entonces jQuery llamada encodeURIComponent y construir el 'data='+encodeURIComponent(myJSON) cadena con respecto a jQuery.param () internamente. Mucho más importante entender, que para tener myJSON usted tiene que producir esta cadena JSON con respecto a algunas funciones que codifican JSON de un objeto que contiene los datos que desea publicar. Por lo que el código se ve en la práctica como siguiente

$.post('somescript.php', { data: JSON.stringify(myObject) }, ...);

donde JSON.stringify es una función JavaScript desde json2.js que transfieren de http puede liberar: // www .json.org / js.html .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top