从get ajax调用中获取变量

时间:2013-03-04 21:10:12

标签: javascript jquery ajax json

这个问题实际上是由于我没有完全理解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
}

actor变量保存了我需要的信息,但是我正在努力将变量从函数中删除。 由于内部功能,它将贯穿并到达return 0;

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

非常感谢任何正确方向的解决方案或指示。

4 个答案:

答案 0 :(得分:4)

这个问题每月被问到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);

答案 1 :(得分:1)

虽然这是真的你不能做到这一点,我发现在我遇到的大多数情况下,这样的事情是可接受的解决办法:

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

这将返回请求对任何调用它的响应。

或者,您可以:

  • 将回复传递给回调。
  • 将$ .ajax与async:false一起使用,但这被认为是不好的做法。

答案 2 :(得分:0)

Read the documentation.它有一些例子,包括数据类型处理。一个简单的检查应该有助于确定返回什么。

答案 3 :(得分:0)

正如您已经注意到的那样,您的ajax响应处理程序在 actor函数返回后执行,从而使返回值变得相当困难。标准解决方案是从actor函数返回一个promise。您可以在jquery docs中阅读承诺或延期对象。

这是我的建议:

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
});