Вы должны поместить это:
$(this).attr('title', $.title);
$(this).closest('li').toggleClass('highlight');
в обратный вызов успеха, который в вашем случае равен
function(data) {
$.title = data;
},
Кроме того, вы назначаете заголовок глобальному объекту jQuery, которыйкажется плохой идеей.Если вы хотите сохранить его в переменной, используйте локальную переменную:
var title = data;
вместо:
$.title = data;
Но в любом случае в этом случае вы должны иметь возможность назначитьзначение непосредственно в обратном вызове, как вы пытались раньше, безуспешно (потому что вы вызывали параметр data
вне его области действия).
Вы заметили, что this
больше не устанавливается для объекта jquery при выполнении обратного вызова.Чтобы исправить это, установите переменную явно за пределами обратного вызова, а затем обратитесь к ней внутри
Итак, поместив код в правильную область и присвоив этому явное значение, он должен выглядеть примерно так:
var $this = $(this);
$.get({
...
function(data) {
$this.attr('title', data);
$this.closest('li').toggleClass('highlight');
},
...
});
Проблема, с которой вы здесь столкнулись, заключается в том, что анонимная функция обратного вызова, которой $ .get () передает параметр data
, не выполняется до после вызов ajax завершен.Таким образом, небольшая часть кода в объявлении вашей функции
function(data) { ... }
не запускается в том порядке, в котором она написана.Вот почему первый «A» в AJAX означает «асинхронный».Код после этой функции будет запускаться одновременно с другим кодом, поэтому ваша подсветка всегда работает.
Причина только для атрибута titleизменяется каждый другой раз, когда ваш успешный обратный вызов присваивает значение data
глобально доступному объекту, $
объекту.Это означает, что вы можете получить доступ к этому значению вне области функции, в которой вы его присваиваете (в данном случае, обратный вызов).Тем не менее, вы можете получить к нему доступ только после того, как он был установлен!Поскольку он не устанавливается до тех пор, пока ответ AJAX не вернется с сервера, $ .title будет «неопределенным», пока это действие не будет завершено.Я предполагаю, что вызов AJAX завершился между вашим первым и вторым кликами.