#jquery #ajax
#jquery #ajax
Вопрос:
У меня есть группа кнопок, я хочу щелкнуть по каждой из них, отправить данные на страницу обработки, затем вернуть данные self html
и изменить класс click
на more
.
В любом случае, в моем коде нет данных reture. Я зарегистрировался chrome - network
, я вижу успешный процесс ajax, даже добавляю оповещение success: function
, я также могу его получить. Где я ошибаюсь?
index.php
$(document).ready(function(){
$(".click").live('click',function() {
$.ajax({
type: "POST",
url: "add.php",
data: "add=ccc",
dataType: "html",
success: function(data){
//alert('success');
$(this).html(data).addClass('more').removeClass('click');
}
});
});
});
<a class="click">bbb</a>
add.php
<?php echo $_POST['add']; ?>
Комментарии:
1. К вашему сведению, вы можете использовать
data: {add: 'ccc'}
— это чище, и как только вы начнете отправлять пользовательский ввод, вам не придется заботиться об экранировании.2. Так что в вашем add.php , вы ожидаете, что он вернет строку «ccc»?
3. попробуйте установить контекст в объекте ajax.
4. @ThiefMaster, спасибо за предложение, все еще не работает. Я предполагаю, что проблема в
$(this)
, но мне это действительно нужно.5. @Jacob, у меня много ссылок, каждая из которых отправляет данные на другую страницу, а затем возвращает данные
itself.html
с изменением calss.
Ответ №1:
this
не указывает на ссылку внутри функции успеха.
Добавьте var self = this;
перед $.ajax
вызовом и используйте self
вместо this
внутри обратного вызова.
Другим вариантом будет использование context: this
в $.ajax
параметрах.
Комментарии:
1. На самом деле это не странно.
this
является особенным в JavaScript, и для jQuery было бы невозможно сохранитьthis
внутри этой функции.