Вы не можете добавлять аргументы в функцию обратного вызова, как это. Однако вы можете сгенерировать функцию-оболочку. Функция обратного вызова 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
в качестве значения callback
в URL YouTube.
Вы могли бы также создать больше таких функций для обработки более длинных списков аргументов. Или вы можете построить универсальный с arguments
и apply
.