jacekn
jacekn

Reputation: 1541

Callback not executing from jQuery post

I'm having problems executing the call back function.

$.post("/" + contentId + "/postComment", {
    "postComment": ""
}, function(data) {
    alert('call back');
});

This post does take place. The alert is not called, however.

This post results in some xml returned. I can't tell exactly how it looks because I'm using Spring mappings of application/xml together with @RequestBody and I just don't know what Spring does to what I'm returning. I'm saying this just in case the contents of server response can affect the call back somehow.

The question is:

what do I need to do to see that alert in my code example?

Upvotes: 8

Views: 11268

Answers (4)

AgathoSAreS
AgathoSAreS

Reputation: 466

For readability, I would recommend to ignore the above correct answer. As of JQuery 1.5 (or later, and in the questions case) use:

$.post("/" + contentId + "/postComment", {
    "postComment": ""
}).always(function() {
    alert('call back');
});

as stated in the JQuery documentation: https://api.jquery.com/jquery.post/
It's not very clear from the documentation but you get the returned "jqXHR" object from the post request as parameter to the always, fail, and done functions.

You can extend the parameters, as you need, up to:

.always(function(responseArray, request, jqxhr, status, error) {
    alert( jqxhr.responseText );
});

Upvotes: 2

Constant Meiring
Constant Meiring

Reputation: 3325

Had a similar issue where the callback doesn't fire when you provide a string as data and the server returns a JSON response. To get around this, simply explicitly specify the datatype to be JSON:

function update_qty(variant_id, qty){
  $.post('/cart/update.js', "updates["+variant_id+"]="+qty, function(data){
    updateCartDesc(data);
  }, "json");
}

Upvotes: 6

dtbarne
dtbarne

Reputation: 8200

I noticed that the ajax script needs to have a content-type of application/json rather than application/javascript, if it is indeed JSON.

Upvotes: 0

T.J. Crowder
T.J. Crowder

Reputation: 1074178

Your code is fine other than that it doesn't hook the error handler (one of the reasons I don't like $.post). I think the POST operation must be resulting in an error. Try converting it to this:

$.ajax({
  type:    "POST",
  url:     "/"+contentId+"/postComment",
  data:    {"postComment":""},
  success: function(data) {
        alert('call back');
  },
  // vvv---- This is the new bit
  error:   function(jqXHR, textStatus, errorThrown) {
        alert("Error, status = " + textStatus + ", " +
              "error thrown: " + errorThrown
        );
  }
});

...so you can see what the error is.

Upvotes: 27

Related Questions