2013-04-08 1 views
1

Я читал об отложенных методах jQuery и пытаюсь реализовать их по вызову AJAX.jQuery AJAX срабатывает рано с текущими данными страницы

Я пытаюсь прослушивать щелчок по элементу (.slideLink), захватывать содержимое соответствующего значения href, а затем регистрировать результаты или регистрировать ошибку в зависимости от результата.

Проблема заключается в том, что содержимое страницы регистрируется, как только загружается страница. Нажатие на .slideLink ничего не делает.

Это то, что я до сих пор:

function getDetails(val){ 
    return jQ.get(val); 
}; 

// click handler 
jQ('#slides').on('click', '.slideLink', function(e){ 
    e.preventDefault(); 
    var addy = jQ(this).attr("href"); 
    getDetails(addy); 
}); 

jQ.when(getDetails()) 
    .done(function(results) { 
     console.log(results); 
    }) 
    .fail(function() { 
     console.log('It doesn\'t work... :('); 
    }); 

Очевидно, я неправильно фундаментальный принцип, но я рисую заготовки с помощью Google.

ответ

1

Вы запускаете getDetails(), как только загружается страница. Кроме того, каждый раз, когда вы выполняете getDetails(), запускается отдельный запрос и возвращается новый отложенный запрос. Попробуйте это:

function getDetails(val){ 
    return jQ.get(val); 
} 

// click handler 
jQ('#slides').on('click', '.slideLink', function(e){ 
    e.preventDefault(); 
    var addy = jQ(this).attr("href"); 
    getDetails(addy).done(function(results) { 
     console.log(results); 
    }) 
    .fail(function() { 
     console.log('It doesn\'t work... :('); 
    });; 
}); 
+0

Спасибо - это отлично! Правильно ли я предполагаю, что 'when()' событие вызвало 'getDetails' на загрузке страницы? – verism

+0

Да, ты прав;) Рад, что я мог помочь! – mike

1

Похоже (from what I read in the docs), что jQ.when(getDetails()) собирается запустить функцию прямо с при загрузке страницы.

Это может быть лучше использовать ajax() над get() таким образом, вы можете использовать done и fail свойства обратного вызова.

function getDetails(val) { 
    $.ajax({ 
     type: "GET", 
     url: val, 
     data: (yourdata), 
     success : function(){}, 
     error : function(){} 
    }) 
} 

Кроме того, вы можете вызвать метод click() непосредственно на .slideLink, если вы хотите.

jQ('.slideLink').click(function(e) { 
    e.preventDefault(); 
    var addy = jQ(this).attr("href"); 
    getDetails(addy); 
}); 
+0

Спасибо за подсказку re: 'ajax()' - я не сталкивался с чем-либо, говоря, что это было бы более подходящим раньше. – verism

+1

'get()' определенно имеет параметры обратного вызова, но метод 'ajax()' их построил прямо без цепочки. 'get()' является просто специфической реализацией 'ajax()' GET'. – SomeShinyObject

+0

В идеале я хотел бы оставить обратные вызовы отдельными, так как логика, скорее всего, будет использоваться в другом месте. Могу ли я сделать это с помощью 'ajax()'? – verism

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