构造Javascript回调:Javascript/JQuery

Constructing Javascript Call back: Javascript/JQuery

本文关键字:Javascript JQuery 回调 构造      更新时间:2023-09-26

我对youtube进行了一系列调用,比如:

function getVideos() {
    for(var i=0; i<queryArray.length; i++){
        var queryUrl = "http://gdata.youtube.com/feeds/api/videos?q="+queryArray[i]+
              "&max-results=1&orderby=relevance&alt=json-in-script&format=5";
     $.get(queryUrl, function(){ 
    constructHtml(data, i);
    });
    }
}

其想法是将$.get调用返回的数据传递到一个函数中,然后该函数将显示相应的html。

我有

function constructHtml (data, idNum) {
// do some stuff
}

但firebug告诉我constructHtml中的"数据"没有定义。我猜我在jquery中使用回调的方式不对。我非常感谢你的帮助!

回调函数中缺少data参数

$.get(queryUrl, function(data){ 
    constructHtml(data, i);
});

更改

$.get(queryUrl, function(){ 

$.get(queryUrl, function(data){ 

您将从.get()的文档中看到,成功函数可以包括其他有用的参数success(data, textStatus, jqXHR) A callback function that is executed if the request succeeds.

您错过了一点:

$.get(queryUrl, function(data){ 
  constructHtml(data, i);
});

您需要指定AJAX加载的匿名回调采用一个数据变量。然后,它将传递到您的函数/

您需要在回调函数中传递数据

$.get(queryUrl, function(data){ 
    constructHtml(data, i);
});

匿名函数中缺少data参数

$.get(queryUrl, function(data){ 
    constructHtml(data, i);
});

i也将始终是queryArray.length,因为函数将在for循环运行后执行。

您可以使用jQuery的each在本地作用域中获取i

$.each(queryArray, function(i, value) {
    var queryUrl = "http://gdata.youtube.com/feeds/api/videos?q=" + value + "&max-results=1&orderby=relevance&alt=json-in-script&format=5";
    $.get(queryUrl, function(data){ 
        constructHtml(data, i);
    });
});