jQuery从ajax函数获得响应

时间:2015-11-26 15:41:34

标签: jquery ajax

我编写了一个函数,用于在发布表单以将数据发布到URL时使用。但是我不确定如何在函数中返回结果,以便我可以检查函数何时被调用,响应是什么。

基本上我希望返回函数中的response值,以便我可以访问它。

/**
 * Submit (POST) the Form via Ajax
 *
 * @param form
 * @param action
 * @param data
 * @param container
 */
function postForm(form,action,method,container){
    $.ajax({
        type: 'post',
        dataType: 'json',
        url: action,
        data: form.serialize(),
        error: function(xhr, status, error) {
            // Display errors
            var err = JSON.parse(xhr.responseText);
            var errMsg = '';
            $.each(err, function(name, val) {
                errMsg += val + '<br>';
            });

            new PNotify({
                title: "Error!",
                text: errMsg,
                type: 'error',
                animate_speed: 'fast'
            });
        },
        success: function (response) {
            handleResponse(method, container, response);
            return response;
        }
    });
}

我想这样用:

var result = postForm(
    form, 
    form.attr('action'),
    form.attr('data-method'),
    $(form.attr('data-container'))
);
alert(result);

目前,var result输出undefined

请帮忙!

2 个答案:

答案 0 :(得分:1)

你的函数应该返回一个promise对象:

function postForm(form,action,method,container){
    var promise = $.ajax({
        type: 'post',
        dataType: 'json',
        url: action,
        data: form.serialize(),
        error: function(xhr, status, error) {
            // Display errors
            var err = JSON.parse(xhr.responseText);
            var errMsg = '';
            $.each(err, function(name, val) {
                errMsg += val + '<br>';
            });

            new PNotify({
                title: "Error!",
                text: errMsg,
                type: 'error',
                animate_speed: 'fast'
            });
        },
        success: function (response) {
            handleResponse(method, container, response);
            return response;
        }
    });
         return promise;   
}

现在您的调用者将引用ajax请求的承诺。 所以现在你做了:

var promise = PostForm(...);
promise.done(function(data) {
    do your thing
  })

您应该阅读:How do I return the response from an asynchronous call?

答案 1 :(得分:0)

你可以处理这样的情况:

success: function (response) {
    handleResponse(method, container, response);
    //return response;
    doSomething(response);
}

然后:

function doSomething(response) {
    alert(response);
}

也许你想通过指定:

来进行呼叫同步(不建议)
$.ajax({
        type: 'post',
        dataType: 'json',
        url: action,
        async: false
        ...