Решение JQuery придумал, чтобы предоставить анонимную функцию обратного вызова, как это:
jQuery.getJSON("http://mycrossdomain.com/?callback=?", function(data) {
// Now I have the data
});
Я думаю, это может быть адаптирована к вашему делу, а также.
var data = new DataRetriever();
data.GetData(function(data) {
// Now I have the data
});
Вы могли бы сделать то же самое, за кулисами в функции GetData, если вы не хотите, чтобы предоставить анонимную функцию.
function GetData(callback) { // optional
// Create random function name however you want
var funcName = "data_" + (+new Date() + Math.floor(Math.random()*100)),
// Moved this up to be available in the random function
new_tag = document.createElement('script');
// This part will allow you to do the callback behind the scenes if callback isn't provided as a param
callback = callback || function(data) {
this.dataReturned = data; // or something
}
// Assign it to the window object
window[funcName] = function(data) {
callback(data);
// Unassign this function
delete window[funcName];
// Recycle the script tag
document.body.removeChild(new_tag);
}
new_tag.type = 'text/javascript';
new_tag.src = 'http://somesite.com/somemethod?callback='+funcName;
// Add the element
document.body.appendChild(new_tag);
}
Обратите внимание, что вам необходимо убедиться, что запрос JSONP принимает параметр GET обратного вызова. Если вы используете сторонний API, они уже будут поддерживать это. Надеюсь это поможет!
Вы должны, вероятно, округлить/пол/ограничить это случайное значение, так как имена функций не должны иметь '.' В них. –
Отличная точка зрения, я также должен отметить, что я бы не предложил использовать мой метод ранжирования имени функции. Возможно, что-то вроде: var funcName = "data_" + (+ new Date()) + Math.floor (Math.random() * 100); будет более подходящим. – tbranyen
Отлично! Большое спасибо! –