jquery $ .post - json - richtiger Weg, um Sende- / Empfangseingangsdaten (auf der Client-Seite nur) - Ein Zwei Fragen Suche

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

  •  30-09-2019
  •  | 
  •  

Frage

Lassen Sie uns vorstellen, dass wir so etwas wie:

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

1) In der Standardeinstellung der drittes Argument der Methode $ .post, die XMLResponse Antwort richtig gelesen? Also, warum brauchen wir dieses Argument ‚replyData‘? Was sind die Gründe dafür, dass wir dafür, dass dieses Argument haben?

2) Das zweite Argument übernimmt die Daten, die gesendet werden. In Ordnung. Ich möchte Json verwenden, aber ich bin mir nicht sicher, ob ich ein JSON-Format auf diesem zweiten Argument sollte oder Ziel des Eingangsformularfeld, das diese Daten enthalten?

Zusätzliche Hinweise: Die Daten werden aus einem Eingabefeld, und ich brauche es über einen $ .post Ajax-Request an den Server zu senden. Ich beabsichtige, json kodieren und dekodieren json PHP-Funktionen zu verwenden.

Vielen Dank im Voraus, MEM

War es hilfreich?

Lösung

Das replyData Argument, um den Körper der Antwort vom Server zurück enthält, die Sie dann bearbeiten können auf Ihrer Seite angezeigt werden, überprüfen Sie, dass der Server-Seite die Daten erfolgreich verarbeitet, etc. Sie müssen ihn nicht verwenden ( zum Beispiel, wenn Sie alle Daten nicht zurück).

Die Daten, die Sie liefern (im JSON-Format), wird nach wie vor in Form eines Abfrage-String sein muß, z.B. param=value. Der Wert muss auch richtig codiert, unter Verwendung von encodeURIComponent () :

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

Dann können Sie die JSON in dem PHP-Skript Zugriff durch den $ _ POST Superglobal:

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

JSON wäre ein wenig übertrieben für ein einfaches Eingabefeld, aber sein. Es ist ungewöhnlich, JSON zu verwenden anstelle von Namen / Wert-Paaren für Formularfelder.

Andere Tipps

1) Das dritte Argument ist die Callback-Funktion. Wenn Sie eine anonyme Funktion, wie sie in Ihrer Probe liefern, müssen Sie das Argument nennen, um darauf zuzugreifen. Wenn Sie eine JSON Struktur zurückkehren, können Sie dann den Zugriff replyData.foo etc.

2) Sie können die Werte aus dem Formular ziehen und eine JSON-Struktur aufzubauen.

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

stahl ich diese Funktion von Drupal und fixierte das folgende Komma auf Arrays und Objekten Weichen Zend_Json_Server verursacht Ausnahmen zu werfen.

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

Jetzt füttern es nur Ihre Daten wie folgt aus:

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

Weicht eine json String zurück rekursiv aus Ihren Variablen erzeugt. Funktioniert für die meisten meiner Anwendungen.

Generell bin ich mit Andy E , dass, wenn man sich den string von Daten, die geschrieben werden, sie sollten aussehen wie

'data='+encodeURIComponent(myJSON)

Ich möchte nur klar, dass in der Praxis eine Verwendung der zweite Parameter von $ .post meist nicht als String:

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

, sondern als Objekt:

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

Dann Funktion jQuery Aufruf encodeURIComponent und konstruieren die Zeichenfolge 'data='+encodeURIComponent(myJSON) bezüglich der jQuery.param () intern. Viel wichtiger zu verstehen, dass myJSON haben Sie das JSON-String mit Bezug auf einige JSON kodiert Funktionen von einem Objekt zu produzieren, die die Daten enthält, die Sie buchen möchten. So wird der Code sieht in der Praxis wie folgt

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

Dabei gilt JSON.stringify ist eine JavaScript-Funktion von json2.js, die Sie kostenlos herunterladen können von http: // www .json.org / js.html .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top