Erklären der jQuery AJAX-Erfolgsmethode

8

Ich versuche, dieses jQuery-Skript zu verwenden, und das verwirrt mich:

%Vor%

Das etwas verwirrte Bit ist das Erfolgsobjekt. Die jQuery-Dokumentation sagt:

%Vor%

Aber diese Methodensignatur sieht nicht so aus wie:

%Vor%

Objekt, das wir scheinbar passieren.

Fragen:

1) Was bedeutet function(msg){ServiceSucceeded(msg)} ?

2) Was ist 'msg' in diesem Kontext?

3) Wie um alles in der Welt soll ich wissen, wie man die Methode für den Erfolg strukturiert?

    
Exitos 18.05.2011, 15:16
quelle

7 Antworten

15

Perfekt vernünftige Frage. :-) In JavaScript müssen Sie nicht unbedingt eine Funktion mit so vielen Argumenten aufrufen, wie sie definiert haben, und Sie müssen nicht so viele Argumente definieren, wie Sie mit aufgerufen werden können. Das kann verwirrend sein, wenn Sie an Umgebungen mit eingeschränkterer Umgebung gewöhnt sind. : -)

Antworten auf Details:

  

1) Was bedeutet Funktion (msg) {ServiceSucceeded (msg)}?

Er definiert eine Funktion (eine anonyme), die ein benanntes Argument ( msg ) akzeptiert und ServiceSucceded in diesem Argument aufruft. jQuery ruft die Funktion mit den drei Argumenten auf, die in der jQuery-Dokumentation für die Funktion success definiert sind, aber diese bestimmte success -Funktion verwendet nur die erste ( data ). Mehr über benannte Funktionen vs. anonyme Funktionen hier .

  

2) Was ist 'msg' in diesem Kontext?

Das erste Argument der Funktion. Die jQuery-Dokumente rufen dieses erste Argument data auf, aber Sie können es beliebig benennen.

  

3) Wie um alles in der Welt soll ich wissen, wie man die Methode für den Erfolg strukturiert?

Sie haben das Richtige getan, es ist in der jQuery-Dokumentation.

Diese Sache über Funktionsargumente kann verwirrend sein, also machen wir ein paar Beispiele:

%Vor%

Das ist vollkommen klar, ich definiere eine Funktion namens foo , die ein einzelnes benanntes Argument, arg , benötigt. Und so:

%Vor%

Aber ich kann das auch tun:

%Vor%

Dort habe ich keine Argumente für foo angegeben, und daher ist in foo , arg nicht definiert.

Ich kann das auch tun:

%Vor%

Ich rufe foo mit zwei Argumenten auf, aber foo verwendet nur eine davon.

Ich könnte foo definieren, um so viele Argumente wie möglich zu verwenden:

%Vor%

arguments ist eine automatische Funktion, die alle Funktionen haben, nämlich ein Pseudo-Array (es ist nicht wirklich ein Array ) der tatsächlichen Argumente, mit denen die Funktion aufgerufen wurde. Und so:

%Vor%

Sie können sogar benannte und unbenannte Argumente mischen:

%Vor%

So jetzt

%Vor%

Beachten Sie die [] um die zweite Warnung herum, weil ich mit dem Index 1 statt mit der Nullschleife begonnen habe.

arguments und benannte Argumente sind verbunden:

%Vor%

Wenn ich foo("Hi"); mache, werden diese Warnungen angezeigt:

%Vor%

(Es geht auch andersherum, wenn Sie arguments[0] aktualisieren.)

    
T.J. Crowder 18.05.2011, 15:22
quelle
6

Die Funktion hat 3 Parameter übergeben: data , status und das jqXHR -Objekt. data ist das, was vom AJAX-Aufruf zurückgegeben wird, status ist der HTTP-Statuscode (denke ich) und jqXHR ist ein jQuery-Wrapped-XHR-Objekt.

In diesem Skript interessieren sie nur den Datenparameter und nicht die anderen beiden.

Mit success: function(msg) erhalten sie nur den Parameter data . Die anderen beiden werden gesendet, aber ignoriert.

ServiceSucceeded ist nur eine Funktion, die mit dem Parameter data aufgerufen wird.

success: ServiceSucceeded hätte auch hier funktionieren können.

    
Rocket Hazmat 18.05.2011 15:19
quelle
2
  1. Dies bedeutet, dass der Erfolgshandler ServiceSucceeded mit der Antwort der Anfrage aufruft.
  2. msg enthält die Antwort von der Anfrage. msg wird in der jQuery-Dokumentation auf data abgebildet.
  3. Sie müssen in der jQuery-Dokumentation nach der Signatur suchen.
Aravindan R 18.05.2011 15:19
quelle
1
  1. Dies ist eine anonyme Funktion .
    Es ist wie eine normale Funktion, aber ohne einen Namen.

  2. msg ist der erste Parameter der Funktion.

  3. Durch Lesen der Dokumentation.

SLaks 18.05.2011 15:21
quelle
1

jquery Ajax ist eine Möglichkeit für Sie, mit dem Server zu kommunizieren (PHP, ASP, was auch immer). Nehmen wir an, Sie verwenden PHP. die Funktion "callService ()" sendet eine Anfrage an "varUrl" (validation.php, dh) und holt (oder POST - & gt; varType) den Inhalt (varContentType - & gt; valdation.php? id = 1231 & amp; was auch immer = soemthing) . Der Zweck davon ist, einige serverseitige Daten zu erhalten, ohne die Seite neu zu laden. Wenn Sie die validation.php auf echo einige html setzen möchten, muss der dataType in der Ajax-Funktion "html" sein. Weitere Informationen zu dataType finden Sie unter jquery.com.

Der Parameter success ist ein Funktionshandler für die Serverantwort. Erfolg wird aufgerufen, wenn Sie eine Antwort vom Server erhalten, die dem von Ihnen angeforderten Datentyp entspricht (html, json, text, was auch immer). In diesem Fall wird, wenn der Server korrekt antwortet, die Funktion "ServiceSucceeded" mit dem Attribut "msg" aufgerufen, was die angeforderte Serverantwort ist.

    
Bene 18.05.2011 15:27
quelle
1

1) Diese Funktion wird aufgerufen, wenn die AJAX-Anforderung erfolgreich ist, d. h. ein Erfolgsstatuscode wird vom kontaktierten Server zurückgegeben.

2) Ich würde annehmen, dass "msg" die Daten sind, die vom Server zurückgegeben werden. Die anderen beiden Argumente werden nicht geliefert und daher nicht verwendet.

3) Verwenden Sie die Jquery-Dokumentation und fischen Sie herum, bis Sie das bekommen, was Sie wollen.

    
James Hobbs 18.05.2011 15:20
quelle
1

Obwohl die Erfolgsfunktion so definiert ist, dass sie drei Parameter (gemäß der von Ihnen zitierten Dokumentation) verwendet, sind diese drei Parameter nicht obligatorisch - Javascript ist sehr verzeihend über diese Art von Dingen; Wenn Sie einen Parameter aus einem Funktionsaufruf verpassen, wird er einfach auf underfined gesetzt. Solange Sie nicht versuchen, ihn zu benutzen, wirft JS keine Fehler.

Der Code, den Sie zur Verfügung gestellt haben, gibt nur einen Parameter - msg -, aber in JS ist dies perfekt gültig; Es bedeutet nur, dass msg der in den Dokumenten definierte Parameter data ist und textStatus und jqXHR nicht definiert sind.

Das ist in Ordnung, solange Sie in Ihrer Erfolgsfunktion keinen dieser Parameter verwenden wollen. Wenn Sie sie verwenden möchten, übergeben Sie sie, aber wenn nicht, ist es in Ordnung, sie fallen zu lassen. Sie schreiben die Erfolgsfunktion, damit Sie entscheiden können, welcher der drei Parameter verwendet werden soll.

    
Spudley 18.05.2011 15:22
quelle

Tags und Links