Jen*_*nn 2 javascript youtube jsonp
如何指定要传递给jsonp回调函数的更多参数?
例如,我正在尝试抓取youtube视频数据:
http://gdata.youtube.com/feeds/api/videos/gzDS-Kfd5XQ?v=2&alt=json-in-script&callback=youtubeFeedCallback
Run Code Online (Sandbox Code Playgroud)
将调用的javascript回调函数是youtubeFeedCallback,并且在调用时它只包含一个参数.
截至目前,功能将是这样的,
function youtubFeedCallback(response) {
...
}
Run Code Online (Sandbox Code Playgroud)
我希望能够做的是传递这样的第二个参数,
function youtubeFeedCallback(response, divId) {
...
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?我试过在网上到处寻找,找不到任何东西.谢谢!
您无法像这样向回调函数添加参数.但是,您可以生成包装函数.JSONP回调函数只是默认命名空间中的一个函数,这意味着您只需要将具有已知名称的生成函数添加到全局window对象中.第一步是组成一个名字:
var callback_name = 'youtubeFeedCallback_' + Math.floor(Math.random() * 100000);
Run Code Online (Sandbox Code Playgroud)
在现实世界中,你想要将它包装在循环中并检查window[callback_name]尚未采取的内容; 你可以window.hasOwnProperty(callback_name)用来检查.获得名称后,您可以构建一个函数:
window[callback_name] = function(response) {
youtubeFeedCallback(response, divId);
};
Run Code Online (Sandbox Code Playgroud)
你想要更多一点:
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;
}
Run Code Online (Sandbox Code Playgroud)
一旦你有了这样的东西,你可以打电话:
jsonp = jsonp_one_arg(youtubeFeedCallback, divId);
Run Code Online (Sandbox Code Playgroud)
然后使用值jsonp作为callbackYouTube网址中的值.
您可以构建更多这样的函数来处理更长的参数列表.或者你可以用arguments和建立一个通用的apply.