2012-05-02 3 views
9

У меня возникла проблема с простой функцией обратного вызова в jQuery ajax. Google не поможет, и переполнение стека тоже не будет, поэтому я предполагаю, что это может быть не что-то конкретное, а что-то, что я слишком неосведомлен, чтобы видеть. Для меня код выглядит точно так, как должен.Почему функция jquery ajax callback не работает?

Итак, вот код:

function sendMessage(message) 
{ 
//Establish connection to php script 
$.ajax({ 
    type: 'POST', 
    url: 'action/chat/test.php', 
    success: function(feedback){ 

     alert(feedback); 

    } 
}).error(function(){ 
    //Do some error handling here 
}); 
} 

В test.php он просто говорит

<?php 
    echo "called"; 
?> 

Насколько я обеспокоен «под названием» должны быть предупреждены, - но это не так. Я уже проверил, что вызывается функция sendMessage() (и сообщение параметра теперь не имеет значения).

У кого-нибудь есть идеи?

+0

У вас есть ошибки скрипта? проверьте консоль firebug. – Shyju

+0

Если вы поставили предупреждение в начале 'sendMessage()', оно отображается? – jfriend00

+0

Два наиболее вероятных варианта: ошибки Javascript, по которым запрос AJAX не отправляется, или проблема с запросом AJAX, что означает функцию «ошибка», а не «успех», выполняется функция обратного вызова. Использование браузера отладчик будет хорошим первым шагом. –

ответ

14

Обновление: Следует отметить также, что вы используете какой-то отладчик, такой как firebug. Затем вы можете перейти на вкладку сети и посмотреть URL-адрес запроса и ответ вручную, чтобы узнать, не получил ли он ответ 200 или внутреннюю ошибку сервера и т. Д.

Попробуйте добавить console.log(data); в свою функцию успеха, чтобы узнать, вернулся.

Вы можете также использовать .always(data):

function sendMessage(message) 
{ 
    //Establish connection to php script 
    $.ajax({ 
     type: 'POST', 
     url: 'action/chat/test.php' 
    }).done(function(data) { console.log(data); }) 
    .fail(function() { alert("error"); }) 
    .always(function() { alert("complete"); }); 
} 

Из документов:

Deprecation Уведомление: jqXHR.success(), jqXHR.error(), и jqXHR.complete() обратные вызовы будет устаревшим в jQuery 1.8. Чтобы подготовить код для их возможного удаления, вместо этого используйте jqXHR.done(), jqXHR.fail() и jqXHR.always().

+2

Я нашел проблему! Была проблема с доступом к файлам из моего apache. Apache не разрешалось читать файл - хотя я только что создал его с Coda, как обычно. Теперь работает обратный вызов. Я только что присоединился к переполнению стека и должен сказать, что меня переполняют все быстрые ответы! Спасибо! – weltschmerz

+0

Следует отметить также, что вы используете какой-то отладчик, такой как firebug. Затем вы можете перейти на вкладку сети и посмотреть URL-адрес запроса и ответ вручную, чтобы узнать, не получил ли он ответ 200 или внутреннюю ошибку сервера и т. Д. – Fostah

+0

спасибо! что мне нужно. – weltschmerz

1

Возможно, это ошибка обработки ошибок. Если вы хотите обрабатывать ошибки, есть еще один атрибут, который вы можете передать объекту, который вы передаете в ajax, это «ошибка», а также «таймаут» для обработки таймаутов страниц. Посмотрите функцию $ .ajax, и вы найдете эти атрибуты.

+0

Когда я пытался использовать обработку ошибок раньше с предупреждением, он ничего не предупреждал. Теперь это так. Кажется, что что-то не так с файлом php, хотя путь правильный. – weltschmerz

+1

Я нашел проблему! Была проблема с доступом к файлам из моего apache. Apache не разрешалось читать файл - хотя я только что создал его с Coda, как обычно. Теперь работает обратный вызов. Я только что присоединился к переполнению стека и должен сказать, что меня переполняют все быстрые ответы! Спасибо! – weltschmerz

4

Только для справки существует такое поведение, которое может закончиться следующим образом (т. Е. Done() не вызывается).

Здесь:

  1. Предположим, вы ожидаете JSON объект (вы просили об этом с "Accept" типа пантомимы).
  2. Предположим, что строка Json недействительна.

В этом случае done() никогда не вызывается, но всегда() будет. И всегда() вы получите «плохо» отформатированный ответ как чистый текст.

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