Jan
16
|
jQuery, $.getJson, $.ajax и все, все, все…
|
До этого я работал только с Prototype, особо jQuery не пользовался, хотя и использовал пару вполне успешно.
В проекте, в котором я сейчас работаю, все построено на Zend Framework + JQuery. Соответственно приходиться сталкиваться теперь довольно часто с jQuery.
Вчера мне понадобилась там одна фишка: нужно было получить данные через Ajax запрос и дальше сделать с ними некоторые манипуляции (обрезание строки и т.д, не суть важно) и вывести клиенту.
Недолго думая, была сделана такая конструкция:
$.getJSON(’<?=$this->newsLetterUrl(’content-start’)?>/’,
{ load_eds_data: 1, idpage: $(’#eds_ref-key’).val(), ajax: ’true’},
function(data) {
subTitle = ’Dates: ’+data.date_text + ’ Venue: ’ + data.xvenue;
});
Удивление наступило позже, когда я понял, что переменная subTitle не видна после этого и не доступна.
Полез в гугл, начал искать, что ж это за фигня получается, что нельзя в переменную записать данные после ajax запроса.
Оказалось, что проблема … в асинхронности запроса $.getJson и для того, чтобы получить нужное мне, конструкцию надо заменить на такую:
$.ajax({
async: false,
data: { load_eds_data: 1, idpage: $(’#eds_ref-key’).val(), ajax: ’true’},
dataType : «json»,
url: ’newsLetterUrl(’content-start’)?>/’,
success: function(data) {
subTitle = ’Dates: ’+data.date_text + ’ Venue: ’ + data.xvenue;
}
});
указав таким образом, что нам нужен неасинхронный запрос. Теперь переменная subTitle видна поза данной конструкцией! И ее можно использовать дальше, как угодно.
Самое интересное, что в prototype таких проблем у меня вообще не возникало. Видимо связано с особенностями реализации библиотеки.
Возможно кому-то пригодится, когда столкнетесь с подобной задачей.