如何将ajax请求包装到函数中?

时间:2017-09-23 10:30:55

标签: javascript jquery ajax

这是我的代码:

function ajaxRequest(value, path, website){
    window[website] = $.ajax({
        url :  path,
        type : 'GET',
        data: { "name": value,
            "_token": $('meta[name="_token"]').attr('content')
        },

        beforeSend: function(){
            if(window[website] != null) {
                window[website].abort();
            }
        },
        success: function (people) {
            return [status, people];
        },

        error: function (jqXHR, textStatus, errorThrown) {
            return [status, textStatus];

        },

        timeout: 15000

    });

}

如您所见,它是一个发送ajax请求的函数。我称之为:

var res = ajaxRequest('Jack', 'search/twitter', 'twitter');
console.log(res);

它返回:

enter image description here

为什么我在控制台中看不到结果?注意到如果我将ajax发送出函数,我可以在控制台中看到结果。 (结果是数据数组)

我该如何解决问题?

2 个答案:

答案 0 :(得分:1)

首先,你没有从函数中返回任何内容,默认是未定义的。

其次,您的res不会是您的ajax调用的结果。由于ajax是异步调用,因此只能在函数successerror中访问您获得的结果。

见这里。你不能归还这个。您需要根据需要在此处编写的data实现的所有其他逻辑。

success: function (people) {
     // Your logic here
},

答案 1 :(得分:1)

function ajaxRequest(value, path, website){

        return new Promise(function (resolve, reject) {
        window[website] = $.ajax({
            url :  path,
            type : 'GET',
            data: { "name": value,
                "_token": $('meta[name="_token"]').attr('content')
            },

            beforeSend: function(){
                if(window[website] != null) {
                    window[website].abort();
                }
            },
            success: function (people) {
                resolve([status, people]);
            },

            error: function (jqXHR, textStatus, errorThrown) {
                reject([status, textStatus]);

            },

            timeout: 15000

        });
    });
}

然后这样做,得到结果:

ajaxRequest('Jack', 'search/twitter', 'twitter').then(function(res) { console.log(res)}, function(err){console.log(err)})`;