如何指定更多参数传递给 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/