2016-09-18 6 views
0

Ich habe JavaScript-Code, der sich anmelden sollte (dh einige Informationen an den Server senden) und dann eine Antwort JSON-Nachricht erhalten. Ich weiß, dass dies machbar ist, indem man zuerst einen Post macht und dann in der asynchronen Antwort, wenn es vervollständigt ist, einen get macht. Dies würde zwei Rückruffunktionen und zwei Nachrichten erfordern.Ist es möglich, GET und POST in Javascript zu kombinieren?

Ich habe mich gerade gefragt, ob es eine Möglichkeit gibt, eine JSON als Teil der Abfrage zu tun und zu senden, so dass es nur eine einzige Anfrage/Antwort statt zwei gibt.

Hier ein Beispiel Post schrieb ich:

function post(url, payload, callback) { 
    payload = JSON.stringify(payload); 
    var http = new XMLHttpRequest(); 
    http.open("POST", location.pathname + url, true); 

    http.setRequestHeader("Content-type", "application/json"); 

    http.onreadystatechange = function() { 
    if (http.readyState === 4 && http.status !== 200) { 
     callback(false, http.response); 
    } else if (http.readyState === 4 && http.status === 200) { 
     callback(true, http.response); 
    } 
    return; 
    }; 

    http.send(payload); 
} 

Wenn ich will, JSON zurück zu bekommen, was soll ich tun?

Ist es so einfach wie POST zu GET zu ändern und zu betrachten: http.responseText bei der Rückkehr?

+2

Es ist kein Problem, es in 1 Anruf zu tun. Es muss auf der Serverseite behandelt werden. –

+0

Ich nehme es der Server erhält die Parameter per Post (Stdin) und antwortet über stdout. Ich habe die Frage bearbeitet, um das Javascript zu zeigen, ich frage, wie man den Klientencode schreibt. – Dov

+0

Sie müssen die Antwort nur in der Callback-Funktion analysieren. –

Antwort

1

Wenn Sie eine Login-Funktion ausführen, sollten Sie immer die HTTP POST-Methode verwenden.

Sie könnten AJAX (W3schools documentation about AJAX) verwenden, um das Senden Ihres Anmeldeformulars über POST zu verarbeiten und dann die Antwort im selben Codeblock zu behandeln. Unten ist ein Beispiel.

$('#login-form').submit(function(e) { 
    e.preventDefault(); // Prevents the page from refreshing 
    // serializes the form data with id login-form 
    var formData = $(this).serialize(); 
    $.ajax({ 
     type: 'POST', 
     data: formData, 
     contentType: 'application/x-www-form-urlencoded', 
     dataType: 'json', 
     url: $(this).attr('action'), 

     //if your server sends a status OK message handle the response 
     //data will be the JSON response from the server 

     success: function(result,status,xhr) { 
      var jsonRes = JSON.parse(result); // parse the JSON object 
      console.log(jsonRes); 
     }, 

     //if there was an error with your request the server will send 
     // an error response code and it is handled here 
     error: function(xhr,status,error) { 
      console.log(error); 
     } 
    }); 
+0

Ich möchte speziell jQuery vermeiden. Das ist gut, aber ich möchte auf der Javascript-Ebene sehen, was der Code macht. Danke für den Link – Dov

Verwandte Themen