Jquery异步调用返回未定义的值

时间:2016-09-13 12:02:18

标签: javascript jquery ajax asynchronous jquery-callback

我已经讨论了关于jquery异步AJAX请求的堆栈溢出的许多主题。这是我的代码。

funciton ajaxCall(path, method, params, obj, alerter) {
var resp = '';
$.ajax({
    url: path,
    type: method,
    data: params,
    async: false,
    beforeSend: function() {
        $('.black_overlay').show();
    },
    success: function(data){
        console.log(data);
        resp = callbackFunction(data, obj);
        if(alerter==0){
            if(obj==null) {
                resp=data;
            } else {
                obj.innerHTML=data;
            }
        } else {
            alert(data);
        }
    },
    error : function(error) {
        console.log(error);
    },
    complete: function() {
        removeOverlay();
    },
    dataType: "html"
});

return resp;
}

问题是,当我使用asyn是假的时候,我得到了正确的resp值。但 beforeSend 不起作用。

如果我把async设为true,那么 beforeSend 正常工作,但resp值将无法正常返回,它总是空白。

有没有办法解决这两个问题?我会得到beforeSend函数和resp值。

由于

3 个答案:

答案 0 :(得分:1)

使用async:false并在beforeSend来电之前手动运行您分配给$.ajax的功能:

var resp = '';
$('.black_overlay').show();
$.ajax({
    ...

或者学习如何使用异步任务的回调函数。网上有很多很好的教程。

答案 1 :(得分:0)

  1. 从函数
  2. 中取出resp变量
  3. 创建一个额外的函数respHasChanged()
  4. 成功获取数据后,请使用代码 resp = data;respHasChanged();

答案 2 :(得分:0)

你可以这样重组,(为什么不以异步方式使用它?)

function ajaxCall(path, method, params) {
    return $.ajax({
        url: path,
        type: method,
        data: params,
        beforeSend: function() {
            $('.black_overlay').show();
        },
        dataType: "html"
    });
}

调用您的javascript文件

ajaxCall(YOUR_PATH, YOUR_METHOD, YOUR_PARAMS)
    .done(function(data) {
        console.log(data);

        // DO WHAT YOU WANT TO DO

        if (alerter == 0 && obj !== null) {
            obj.innerHTML = data;
        } else {
            alert(data);
        }
    }).fail(function(error) {
        console.log(error);
    }).always(function() {
        removeOverlay();
    });