Вот мой сценарий jQuery:
$.ajax({ type: 'POST', url: 'zipCodes.php', data: searchZipCode, cache: false, success: function(response) { alert ('response from db search: ' + response); }, error: function(response) { console.log(response); alert('Query failed, php script returned this response: ' + response); } });
Вышеупомянутый скрипт находится в главном теге html-файла, в котором находится форма. PHP-скрипт находится в той же папке, что и файл html.
Вот форма:
<form id="frmZipCodeSearch" action=""> <label for="txtZipCodeSearch">Enter a zip code</label> <input type="text" id="txtZipCodeSearch" length="10" maxlength="5" /> <input type="submit" id="btnSubmitZipCodeSearch" /> </form>
Я также подтвердил, что значение «searchZipCode» имеет значение.
Каждый раз, когда я запускаю поиск, я получаю предупреждение от части ошибки вызова ajax, в котором говорится:
Ошибка запроса, php-скрипт вернул этот ответ: [object Object]
и это отображается в консоли:
Object {readyState: 0, setRequestHeader: function, getAllResponseHeaders: function, getResponseHeader: function, overrideMimeType: function …}
Я попытался снять скрипт php только с эхом. Я не получаю журналы ошибок php, сгенерированные в папке со сценарием на сервере. Ничто из меня, похоже, не дает мне другого результата. За одним исключением:
Единственный раз, когда у меня был другой результат, было то, что я удалил ajax и переместил php-скрипт в файл с формой и сделал «обычный» метод POST формы HTML. Это сработало. Но я не думаю, что путь неправильный, когда php – это другой файл, потому что я не получаю «файл не найден» в консоли.
Какого черта я здесь не хватает?
[Дополнительная информация] В ответ на ответ hek2mgl я добавил xhr в ответ об ошибке и получил дополнительную информацию в консоли:
Uncaught ReferenceError: xhr is not defined zipCodeSearch.html:57 $.ajax.error zipCodeSearch.html:57 l jquery-1.8.3.min.js:2 c.fireWith jquery-1.8.3.min.js:2 T jquery-1.8.3.min.js:2 r jquery-1.8.3.min.js:2
Все остальные jQuery, которые я использую, работают нормально, но это первый раз, когда я сам использовал v1.8.3.
[Answer – credit hek2mgl] Как объяснил hek2mgl в нашем сумасшедшем обсуждении, я дважды отправлял форму, потому что вызов ajax находился в событии нажатия кнопки формы.
Исправить это было, чтобы переместить вызов ajax из события click в его собственную функцию, и после моей проверки на стороне клиента вызовите функцию ajax и добавьте «return false»; после вызова функции.
Обратный вызов ошибки $ .ajax определяется следующим образом:
Тип: Функция (jqXHR jqXHR, String textStatus, String errorThrown)
Вы сбросили весь объект jqXHR. В отличие от функции успеха, сам обработанный текст не является параметром обратного вызова ошибки. Чтобы получить текст ответа (если есть), используйте это:
error: function(xhr) { var response = xhr.responseText; console.log(response); var statusMessage = xhr.status + ' ' + xhr.statusText; var message = 'Query failed, php script returned this status: '; var message = message + statusMessage + ' response: ' + response; alert(message); }