Dov
Dov

Reputation: 8562

Is it possible to combine a GET and POST in Javascript?

I have javascript code that should login (ie send some information to the server) and then receive a reply JSON message. I know this is doable by first doing a post, and then in the asynchronous response, when it completes, do a get. This would require two callback functions and two messages.

I was just wondering whether there is any way to do a get and send JSON as part of the query, so that there is just a single request/response rather than two.

Here is a sample post I wrote:

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

If I want to get back JSON, what do I do?

Is it as simple as changing POST to GET and looking at: http.responseText upon the return?

Upvotes: 0

Views: 907

Answers (1)

CasualCoder3
CasualCoder3

Reputation: 669

If you are doing any login functionality you should always use the HTTP POST method.

You could use AJAX (W3schools documentation about AJAX ) to handle sending your login form over POST and then handle the response in the same code block. bellow is an example.

$('#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);
        }
    });

Upvotes: 1

Related Questions