2010-04-06 3 views
0

Я пишу плагин jQuery для рендеринга данных, полученных из другого домена в элементе на странице. Я следую за типичный образец для моего JQuery плагин:Каков шаблон для метода JSONP, который был инициирован из плагина jQuery?

$(selector).Plugin(options); 

В плагине я получаю внешние данные, используя jQuery.getScript(url, [success]). Внешний источник данных позволяет мне определить имя метода, и он будет обернуть данные в вызове этого метода (JSONP):

$.getScript("http://www.example.com/data?callback=global_callback", instance_callback); 

Это эффективно приводит:

<script type="text/javascript"> 
    global_callback(data); 
</script> 

области видимости global_callback ограничивает то, что Пример подключения может делать с данными. И метод global_callback не знает о селекторе или параметрах, с которыми был создан экземпляр плагина.

Я думал, что global_callback просто сохранит данные, а плагин будет извлекать данные в instance_callback. Но мне нужно убедиться, что instance_callback вернет правильные данные, я предвижу проблему с несколькими экземплярами плагина. Как я могу справиться с этим?

Спасибо!

ответ

1

Возможно, я не понимаю, о чем вы просите. Эти обратные вызовы работают аналогично регулярному JSON, за исключением того, что вы можете назвать обратный вызов (если хотите). Выполнение в контексте AJAX, но, конечно, это невозможно, если вы не назначили его другой переменной.

Если вы сделали свой вызов, как это, вы даже не нужно было бы назвать свою функцию обратного вызова:

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", function(data){ 
    $.each(data.items, function(i,item){ 
    $("<img/>").attr("src", item.media.m).appendTo("#images") 
     .wrap("<a href='" + item.link + "'></a>"); 
    if (i == 3) return false; 
    }); 
}); 

Ссылка: http://docs.jquery.com/Release:jQuery_1.2/Ajax#Cross-Domain_getJSON_.28using_JSONP.29

Если вы обеспокоены тем, с запуском в случае вашего плагина, обертывание этот вызов в закрытии. Таким образом, вы можете ссылаться на любой экземпляр, который вам нужен для доступа во время обратного вызова.

function GetSomeData(){ 
    var that = this; //reference to the element you are working 
    $.getJSON("...",function(data){ 
    //do some stuff to element with data 
    $("element").data("JSONP",data); 
    }); 

} 
+0

Отлично, я не знал о $ .getJSON(), кажется, решить проблему путем создания функции с уникальным именем для каждого запроса, так что я могу избавиться от моей глобальной функции обратного вызова и I вероятно, не нужно беспокоиться о параллелизме. Спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^