Поскольку запрос AJAX по умолчанию является асинхронным, alert()
выполняется до получения запроса AJAX, и поэтому переменной json
не было присвоено значение.
Какой бы функции вы не хотели (например, предупреждение) должно быть в обратном вызове к запросу AJAX, или должно быть в функции, вызываемой из обратного вызова, или, возможно, вызываемой с помощью .ajaxSuccess()
.
Или, возможно, вы могли бы передать функцию в качестве параметра своему плагину и сделать так, чтобы ее вызывал обратный вызов $.getJSON()
.
РЕДАКТИРОВАТЬ:
Примерпередачи обратного вызова для выполнения успешного $.getJSON()
запроса:
$.fn.agenda = function(opts) {
var defaults = {...} // your defaults
$.extend(defaults, opts); // Extend your defaults with the opts received
$.getJSON(base_url,{
agenda_id:defaults.id,
action:defaults.action+defaults.type,
output:defaults.output
},function(json){
defaults.success.call(this,json); // Call the 'success' method passing in the json received
});
};
$('#agenda-live-preview').agenda({
action:'get',
type:'agenda',
output:'json',
success:function(data) { // Pass a function to the plugin's 'success' property
alert(data[0].agenda_id);
alert( $(this).selector );
}
});