从get ajax调用中获取变量

Getting variable out of a get ajax call

本文关键字:获取 变量 调用 get ajax      更新时间:2023-09-26

这个问题实际上是由于我没有完全理解jquery。

我有一些代码,我试图把一个函数使用多次。

function actors(query){
    $.get("websit.com?title=" + query + "&type=json", function(html){
        var result = html;
        var obj = eval ("(" + result + ")");
        var actor = obj[0].actors;
        return actor; //as far as im aware this does nothing
    });
    return 0; // gets here and returns zero, returning actor here returns undefined
}

演员变量保存了我需要的信息,但是我正在努力将变量从函数中取出。由于内部函数的作用它会穿过并到达return 0;

如果我尝试给内部函数赋值一个变量,它将返回一个对象,而不是返回变量。

如果您能提供正确的解决方案或指导,我将不胜感激。

这个问题每月被问到1000次。您不能使异步调用像同步调用一样工作。这就是回调的作用。

你也在使用jQuery,没有必要使用eval!设置正确的内容类型,它将为您解析数据。

回调的基本思想

function actors(query, callback){
    $.getJSON("websit.com?title=" + query + "&type=json", function(data) {
        var actor = data[0].actors;
        callback(actor);
    });
}

function processResults(info){
    console.log(info);
}
actors("Something", processResults);

虽然您确实不能那样做,但我发现在我遇到的大多数情况下,这样做是可以接受的解决方法:

function getMeSomeJSON(query) {    
  return $.get("websit.com?title=" + query + "&type=json");
}

将请求的响应返回给调用它的对象。

也可以:

  • 传递回调的响应。
  • 使用美元。但是,这被认为是不好的做法。

阅读文档。它有一些示例,包括数据类型处理。一个简单的检查应该有助于确定返回什么。

正如您自己注意到的,ajax响应处理程序在 actor函数返回后执行,因此很难返回值。标准的解决方案是从actor函数返回一个承诺。你可以在jquery文档中阅读有关承诺或延迟对象的内容。

这是我的建议:

function actors(query){
    var actorsPromise = $.Deferred();
    $.get("websit.com?title=" + query + "&type=json", function(html){
        var result = html;
        var obj = eval ("(" + result + ")");
        var actor = obj[0].actors;
        actorsPromise.resolve(actor);
    });
    return actorsPromise;
}
actors(/* your query */).done(function(actor) {
    //do whatever you need with your actor
});