简体   繁体   中英

jsCall return value to outside of jquery ajax post request

I want to get jquery ajax post request value to outside from the ajax function. my code is this and it return undefined as console output. How should fix it

function submit() {
    var outputFromAjax = submitViaPost('administrator/validationForInputValuesOfAddRole');

    console.log(outputFromAjax);
}

function submitViaPost(url) {

    var formData = $('form').serializeArray();

    var output;

    $.post(urlForPhp + '/' + url, formData, function (outputData) {
        output = outputData;
    });
    return output;
}

Edited

I changed my code to sync type ajax post request and check output. But it is not changed. here my code

function submit() {
    var outputFromAjax = submitViaPost('administrator/validationForInputValuesOfAddRole');

    console.log(outputFromAjax);
}

function submitViaPost(url) {

    var formData = $('form').serializeArray();

    var output;

    $.ajax({
        url: urlForPhp + '/' + url,
        data: formData,
        dataType: 'JSON',
        async: false,
        method: 'POST',
        success: function (e) {
            output =  e;
        }
    });
    return output;
}

Don't return , make it a callback as $.post is async

function submit() {
    submitViaPost('administrator/validationForInputValuesOfAddRole', function(out){ //Result comes here
      var outputFromAjax = out;
      console.log(outputFromAjax);
    });
}

function submitViaPost(url , callback) { //Added callback
    var formData = $('form').serializeArray();
    $.ajax({
    url: urlForPhp + '/' + url,
    data: formData,
    dataType: 'JSON',
    async: false,
    method: 'POST',
    success: function (e) {
        callback(e);
    }
 });
}

You can use Deferred jQuery

function submit() {
    submitViaPost('administrator/validationForInputValuesOfAddRole').then(function (outputFromAjax) {
        console.log(outputFromAjax);
    });
}

function submitViaPost(url) {
    var dfd = jQuery.Deferred();
    var formData = $('form').serializeArray();
    $.post(urlForPhp + '/' + url, formData, function (outputData) {
        dfd.resolve(outputData);;
    });
    return dfd;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM