首页 > 解决方案 > jQuery未定义的ajax函数

问题描述

我从 jQuery 开始,我想检索并显示返回数组的自定义 ajax 函数的结果。但是我的控制台将我发回未定义:

不明确的

<head> 部分正确引用了 jQuery 库 CDN。我读了很多关于这个网站的讨论,但我无法解决这个问题。但是,我的印象是我的代码是正确的?

function query_suggest(query, lang){
    var result;

    $.ajax({
        url: 'http://suggestqueries.google.com/complete/search',
        data: {
            "hl": lang,
            "ds": "",
            "q": query,
            "client": "firefox"
        },
        jsonpCallback: 'msgsJsonCallback', 
        type: 'GET',
        headers: {
            "Accept-Language": lang,
            "Accept": "application/json",
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"
        },
        dataType: 'jsonp',
        success: function(data) {       
            result = data;
            return result;

        },
        error: function(jqXHR, textStatus, errorThrown) {
            console.log(jqXHR);
            console.log(textStatus);
            console.log(errorThrown);
        },
        cache: true
    }); 
}

var suggest = query_suggest("chuck norris", "en");

console.log(suggest);

标签: javascriptjquery

解决方案


如果你想围绕一个 ajax 调用创建一个函数包装器,你可以返回一个 Promise 并在 Promise 解决时对响应做任何你想做的事情:

function query_suggest(query, lang) {
    return new Promise(
        function (resolve, reject) {
            $.ajax({
                url: 'http://suggestqueries.google.com/complete/search',
                data: {
                    "hl": lang,
                    "ds": "",
                    "q": query,
                    "client": "firefox"
                },
                jsonpCallback: 'msgsJsonCallback',
                type: 'GET',
                headers: {
                    "Accept-Language": lang,
                    "Accept": "application/json",
                    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"
                },
                dataType: 'jsonp',
                success: resolve,
                error: reject,
                cache: true
            });
        })
}

var suggest = query_suggest("chuck norris", "en");

suggest.then(result => {
    console.log(result) // on success
}).catch(function () {
    console.log(this, arguments) // on error
})

推荐阅读