jquery $ .post - JSON - modo corretto di inviare / ricevere dati di input (sul lato client solo) - A due domande Quest

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

  •  30-09-2019
  •  | 
  •  

Domanda

di immaginare che abbiamo qualcosa di simile Let:

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

1) Per impostazione predefinita, il terzo argomento del metodo di $ .post, leggerà la risposta XMLResponse corretta? Allora, perché abbiamo bisogno che l'argomento 'replyData'? Quali sono le ragioni che possiamo avere per avere tale argomento?

2) Il secondo argomento accetta i dati che verranno inviati. Ok. Vorrei utilizzare JSON, tuttavia, non sono sicuro se devo utilizzare un formato JSON su quel secondo argomento o bersaglio il campo di modulo di input che conterrà i dati?

Note aggiuntive: I dati verrà da un campo di input, e ho bisogno di inviarlo tramite un $ .post richiesta AJAX al server. Ho intenzione di utilizzare JSON e JSON codificare decodificare php funzioni.

Grazie in anticipo, MEM

È stato utile?

Soluzione

L'argomento replyData contiene il corpo della risposta restituita dal server, che è quindi possibile manipolare per visualizzare sulla tua pagina, verificare che il lato server ha elaborato i dati con successo, ecc Non devi usarlo ( per esempio, se non riesci a tornare tutti i dati).

I dati che si intende inserire (in formato JSON), sarà ancora bisogno di essere sotto forma di una stringa di query, ad esempio, param=value. Il valore sarà anche bisogno correttamente codifica, utilizzando encodeURIComponent () :

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

Quindi, è possibile accedere alla JSON nello script PHP attraverso il $ _ POST superglobale:

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

JSON sarebbe un po 'eccessivo per un campo di inserimento semplice, però. E 'raro utilizzare JSON al posto di coppie nome / valore per i campi modulo.

Altri suggerimenti

1) Il terzo argomento è la funzione di richiamata. Se si fornisce una funzione anonima, come nel tuo esempio, è necessario dare un nome alla tesi per accedervi. Se si restituisce una struttura JSON, è quindi possibile accedere replyData.foo etc.

2) Si può tirare i valori dal modulo e costruire una struttura 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); } );

I rubato questa funzione da Drupal e fissato il virgola finale su array e oggetti wich causato Zend_Json_Server per gettare le eccezioni.

    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;
  }
}

Ora basta alimentarlo i dati in questo modo:

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

Quale restituirà una stringa JSON ricorsivamente generata dal variabile. Opere per la maggior parte delle mie applicazioni.

In generale sono d'accordo con Andy E che se si guarda al stringa di dati che saranno pubblicati dovrebbero assomigliare

'data='+encodeURIComponent(myJSON)

Voglio solo chiarire, che nella pratica un uso il secondo parametro di $ .post per lo più non come una stringa:

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

ma come un oggetto:

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

Quindi la funzione jQuery chiamata encodeURIComponent e costruire la stringa 'data='+encodeURIComponent(myJSON) rispetto delle jQuery.param () internamente. Molto più importante capire, che per avere myJSON si deve produrre questa stringa JSON rispetto di alcune funzioni di codifica JSON da un oggetto che contiene i dati che si desidera inviare. Così Il codice appare in pratica come segue

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

dove JSON.stringify è una funzione JavaScript da json2.js che si può scaricare gratis da http: // www .json.org / js.html .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top