Запрос jQuery Ajax не возвращает данные

#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 внутри этой функции.