javascript - 将多个参数/参数附加到 jsonp 回调函数

标签 javascript youtube jsonp

如何指定更多参数传递给 jsonp 回调函数?

例如,我正在尝试抓取 YouTube 视频数据:

http://gdata.youtube.com/feeds/api/videos/gzDS-Kfd5XQ?v=2&alt=json-in-script&callback=youtubeFeedCallback

将调用的 JavaScript 回调函数是 youtubeFeedCallback,调用时仅包含一个参数。

到目前为止,该函数将是这样的,

function youtubFeedCallback(response) {
...
}

我希望能够传递第二个这样的参数,

function youtubeFeedCallback(response, divId) {
...
}

这可以做到吗?我尝试在网上到处寻找但找不到任何东西。 谢谢!

最佳答案

您不能像这样向回调函数添加参数。但是,您可以生成包装函数。 JSONP 回调函数只是默认命名空间中的一个函数,这意味着您只需将一个已知名称的生成函数添加到全局 window 对象中。第一步是起一个名字:

var callback_name = 'youtubeFeedCallback_' + Math.floor(Math.random() * 100000);

在现实世界中,您需要将其包装在循环中并检查 window[callback_name] 是否已被占用;你可以使用 window.hasOwnProperty(callback_name)去检查。一旦你有了名字,你就可以构建一个函数:

window[callback_name] = function(response) {
    youtubeFeedCallback(response, divId);
};

不过,您可能还想再提高一点:

function jsonp_one_arg(real_callback, arg) {
    // Looping and name collision avoidance is left as an exercise
    // for the reader.
    var callback_name = 'jsonp_callback_' + Math.floor(Math.random() * 100000);
    window[callback_name] = function(response) {
        real_callback(response, arg);
        delete window[callback_name];  // Clean up after ourselves.
    };
    return callback_name;
}

一旦你完成了类似的连接,你就可以调用:

jsonp = jsonp_one_arg(youtubeFeedCallback, divId);

然后使用 jsonp 的值作为 YouTube 网址中的callback 值。

您也可以构建更多这样的函数来处理更长的参数列表。或者您可以使用 arguments 构建一个通用用途的和 apply .

关于javascript - 将多个参数/参数附加到 jsonp 回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6555172/

相关文章:

javascript - 处理 AJAX 站点的哈希 URL 的更好方法

visual-studio-2010 - Visual Basic中的YouTube自动播放

php - 无法使用 JsonP 获取希伯来语结果

jquery - 将 Typeahead 与 Google 自定义搜索引擎结合使用

php - 在 PHP 中提取 JSON 结果集

javascript - 如何防止重写:hover on .点击 Action

javascript - 是否可以在同一个文件中访问其他模块导出功能?

javascript - 串行滚动条问题

ios - 在 iOS Swift 中下载 mp3 格式的 youtube 视频

javascript - 单击一个 div 隐藏 div 并替换另一个