Intereting Posts
я могу передать запрос mongodb как строку в php Сбросить ключи элементов массива в php? Как отложить или аскетировать этот фрагмент javascript WordPress, чтобы загрузить последний раз для более быстрого времени загрузки страницы? Неправильная ориентация Jcrop от загрузки Iphone, как я могу это сделать? Sanitize (переключатели, флажки и <опция>) Доступ ко всем содержимым каталога псевдонимов в PHP Ошибка при использовании -> paginate () с Laravel Как сделать запрос HTTPS с помощью cURL? альтернативы php in_array для больших массивов для избежания записей дубликатов Передача в 32-битное целое может привести к усечению PHP Propel? Laravel скрытые атрибуты. например, пароль – безопасность Каков наилучший способ загрузки и хранения изображений на сайте? CodeIgniter: «Тип файла, который вы пытаетесь загрузить, не разрешен». doctrine2: в двунаправленных отношениях «один ко многим», как сохранить с обратной стороны? Mysql приводит к PHP-массивам или объектам?

Не могу понять, почему скрипт php не работает при вызове $ .ajax

Вот мой сценарий 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); }