2008-12-17 14 views
80

Ich habe den folgenden Code:Wie erfassen ich Antwort von form.submit

<script type="text/javascript"> 
     function SubmitForm() 
     { 

      form1.submit(); 
     } 

     function ShowResponse() 
     { 

     } 
</script> 
. 
. 
. 
<div> 
    <a href="#" onclick="SubmitForm();">Click</a> 
</div> 

ich die HTML-Antwort von form1.submit aufnehmen möchten? Wie mache ich das? Kann ich eine Callback-Funktion für die form1mit-Methode registrieren?

Antwort

87

Sie können dies nicht einfach mit einfachem Javascript tun. Wenn Sie ein Formular bereitstellen, werden die Formulareingaben an den Server gesendet und Ihre Seite wird aktualisiert. Die Daten werden auf der Serverseite verarbeitet. Das heißt, die Funktion submit() gibt tatsächlich nichts zurück, sondern sendet nur die Formulardaten an den Server.

Wenn Sie wirklich die Antwort in Javascript erhalten wollten (ohne die Seite zu aktualisieren), dann müssen Sie AJAX verwenden, und wenn Sie über AJAX sprechen, benötigen Sie , um eine Bibliothek zu verwenden. jQuery ist bei weitem die beliebteste und mein persönlicher Favorit. Es gibt ein großes Plugin für jQuery namens Form, das genau das tut, was es so klingt wie du willst.

Hier ist, wie Sie jQuery und dieses Plugin verwenden würde:

$('#myForm') 
    .ajaxForm({ 
     url : 'myscript.php', // or whatever 
     dataType : 'json', 
     success : function (response) { 
      alert("The server says: " + response); 
     } 
    }) 
; 
+4

+1 für jQuery Form-Plugin. Es ist großartig, aber Sie haben das Ziel-Attribut falsch. Es ist nicht wie das Attribut 'Aktion' des Formulars; d.h. es ist nicht das Einreichungsziel. Von [Docs] (http://malsup.com/jquery/form/#optionsobject): ** target - Identifiziert die Elemente auf der Seite, die mit der Serverantwort aktualisiert werden sollen. ** – JCotton

+0

@JCotton , danke - bearbeitet! – nickf

+13

um fair zu sein, müssen Sie keine Bibliothek für AJAX verwenden. Bibliotheken werden mit Javascript geschrieben, daher existiert eine Nicht-Bibliothekslösung. Das heißt, ich bin zu 100% dafür, eine Bibliothek zu verwenden, um all die Lächerlichkeit und Komplexität zu abstrahieren, die mit einem AJAX-Aufruf verbunden sind. – Jason

0

Sie müssen AJAX verwenden. Das Senden des Formulars führt normalerweise dazu, dass der Browser eine neue Seite lädt.

7

Ich bin nicht sicher, dass Sie verstehen, was submit() tut ...

Wenn Sie form1.submit(); die Formularinformationen zu tun an den Webserver gesendet wird.

Der WebServer wird tun, was er tun soll und eine neue Webseite an den Client zurückgeben (normalerweise die gleiche Seite mit etwas geändert).

Also, es gibt keine Möglichkeit, Sie können die Rückkehr einer form.submit() Aktion "fangen".

+0

Ich habe eine andere HTML-Seite und kehrte diese als Antwort. – Khushboo

4

Es gibt keinen Rückruf. Es ist so, als würde man einem Link folgen.

Wenn Sie die Serverantwort erfassen möchten, verwenden Sie AJAX oder posten Sie es zu einem Iframe und greifen Sie nach dem onload() Ereignis des Iframes.

0

Sie können das mit Javascript und AJAX-Technologie tun. Werfen Sie einen Blick auf Jquery und auf diese form plug in. Sie müssen nur zwei js-Dateien einschließen, um einen Rückruf für das form.submit zu registrieren.

46

Eine Ajax Alternative ist ein unsichtbares als Form des Ziels zu setzen und den Inhalt dieser in seiner onload Handler zu lesen. Aber warum, wenn es Ajax gibt?

Hinweis: Ich wollte nur diese Alternative zu erwähnen, da einige der Antworten behaupten, dass es unmöglich ist dies ohne Ajax zu erreichen.

+2

Sagen Sie, wenn Sie mit einem Klick auf eine URL für einen Download posten wollten? Jetzt können Sie Ajax nicht für Ihre Anfrage verwenden. Möchten Sie die Oberfläche dann bereinigen oder aktualisieren, wenn der Download abgeschlossen ist? Jetzt ist es an der Zeit, einen Rückruf von einem POST zu verlangen, der * nicht * Ajax ist. (Necropost, ich weiß.) –

+1

@ Dropped.on.Caprica Yup, das ist immer noch ein legitimer Anwendungsfall für '