Jquery Ajax Call, doesn't call Success or Error [duplicate] Jquery Ajax Call, doesn't call Success or Error [duplicate] jquery jquery

Jquery Ajax Call, doesn't call Success or Error [duplicate]


change your code to:

function ChangePurpose(Vid, PurId) {    var Success = false;    $.ajax({        type: "POST",        url: "CHService.asmx/SavePurpose",        dataType: "text",        async: false,        data: JSON.stringify({ Vid: Vid, PurpId: PurId }),        contentType: "application/json; charset=utf-8",        success: function (data) {            Success = true;        },        error: function (textStatus, errorThrown) {            Success = false;        }    });    //done after here    return Success;} 

You can only return the values from a synchronous function. Otherwise you will have to make a callback.

So I just added async:false, to your ajax call

Update:

jquery ajax calls are asynchronous by default. So success & error functions will be called when the ajax load is complete. But your return statement will be executed just after the ajax call is started.

A better approach will be:

     // callbackfn is the pointer to any function that needs to be called     function ChangePurpose(Vid, PurId, callbackfn) {        var Success = false;        $.ajax({            type: "POST",            url: "CHService.asmx/SavePurpose",            dataType: "text",            data: JSON.stringify({ Vid: Vid, PurpId: PurId }),            contentType: "application/json; charset=utf-8",            success: function (data) {                callbackfn(data)            },            error: function (textStatus, errorThrown) {                callbackfn("Error getting the data")            }        });     }      function Callback(data)     {        alert(data);     }

and call the ajax as:

 // Callback is the callback-function that needs to be called when asynchronous call is complete ChangePurpose(Vid, PurId, Callback);


Try to encapsulate the ajax call into a function and set the async option to false. Note that this option is deprecated since jQuery 1.8.

function foo() {    var myajax = $.ajax({        type: "POST",        url: "CHService.asmx/SavePurpose",        dataType: "text",        data: JSON.stringify({ Vid: Vid, PurpId: PurId }),        contentType: "application/json; charset=utf-8",        async: false, //add this    });    return myajax.responseText;}

You can do this also:

$.ajax({    type: "POST",    url: "CHService.asmx/SavePurpose",    dataType: "text",    data: JSON.stringify({ Vid: Vid, PurpId: PurId }),    contentType: "application/json; charset=utf-8",    async: false, //add this}).done(function ( data ) {        Success = true;}).fail(function ( data ) {       Success = false;});

You can read more about the jqXHR jQuery Object