Intereting Posts
Миграция не удалась, DB сломан. Как исправить или хотя бы вывести статический HTML без плагинов? Как я могу создать виджет области виджета, используя встроенные функции WordPress? Почему URL-адрес настраиваемого типа сообщений «/? Cposts = name-of-the-post», но URL-адрес почтового индекса по умолчанию «/? P = ID»? Настройки пользовательских сообщений и постоянных ссылок Можно ли изменить пользовательскую метку типа сообщения из дочерней темы? Автоматическое удаление сообщений на основе текста контента Зарегистрируйте предварительно определенное дерево таксономии Почему мой URL-адрес WordPress сокращен Структура Permalink, не работающая с пользовательской таксономией (URL как ./taxonomy/category/postname) Каков безопасный способ печати кода отслеживания / пикселя перед тегом </ head> или тегом </ body> Как показать отдельную страницу в качестве домашней страницы Как запретить участнику публиковать темы (bbpress)? Запретить смену divi в текущем меню Скрыть текст, если нет главной страницы Запрос нескольких категорий с различными смещениями

WP REST возвращает значение функции ошибки из запроса

С помощью WP.SE я узнал, как отправлять данные из формы в WP_REST, но теперь у меня возникла проблема с возвратом пользовательской ошибки. Я могу успешно передать информацию WP_REST_Response и я добавил проверку в WP_REST_Response и хочу, чтобы она вернула сообщение об ошибке обратно в функцию ошибки AJAX, но у меня возникли проблемы.

Например, в моем локальном поле IP is ::1 и если я создаю функцию в PHP:

 function ipAddress() { if (isset($_SERVER['REMOTE_ADDR'])) : $ip_address = clean($_SERVER['REMOTE_ADDR']); else : $ip_address = "undefined"; endif; return $ip_address; } 

и после изучения того, как вернуть чек, я столкнулся:

  • Возвращение JSON из скрипта PHP
  • Чистый способ бросить исключение php через jquery / ajax и json
  • Возвращение JSON из PHP в JavaScript?

поэтому я добавил в свой WP_REST_Response :

 function vader(\WP_REST_Request $request) { if (ipAddress() == "::1") : return json_encode(array( 'error' => 'you are localhost' )); endif; } 

и в моем vader.js, если я использую:

 error: function(data) { throw data.error; }, 

но у меня нет ошибок в консоли, и он показывает {"error":"you are localhost"} но я просто хочу, чтобы значение возвращалось к функции ошибки.

Глядя на документацию jQuery.ajax (), я нашел statusCode и могу получить:

 if (ek_ip_address() == "::1") : return new WP_Error('foo', 'bar', array('status' => 404)); endif; 

а также:

 statusCode: { 404: function() { $('#testForm').append("thrown 404s"); } } 

Есть ли способ получить error чтобы показать или я не понимаю error AJAX? Что я делаю неправильно, и как я могу получить значение JSON из WP_REST_REQUEST чтобы перейти к функции error ?

Вызов Ajax можно отправить в любом месте. Это может быть сервер, на котором работает PHP, виртуальный локальный маршрут, имитируемый с использованием C # или что-то еще. Итак, Аяксу все равно, какой ответ, так как он не может этого понять.

Когда вы отправляете какие-либо данные с вашего сервера, пока статус равен 200 (или что-то еще, кроме ошибки), сценарий Ajax считает этот успешный запрос. После этого вы должны справиться с ситуацией, исходя из вашего ответа.

Простой пример

Я новичок на английском языке. Я использую слово «error» вместо «success» и возвращаю его как ответ.

 $data['status'] = 'error'; $data['message'] = 'Nice! Request has been done.'; return $data; 

Сервер успешно выполнил задачу, но отправил неверный статус. Как бы Аякс знал это?

Таким образом, раздел ошибки для вызова Ajax – это когда возникает проблема с запросом, прежде чем он будет завершен, а не после. После того, как ответ был отправлен, Ajax выполнил свою работу, он считается успешным.

Пример реальной жизни

  1. Скажем, вы пишете письмо другу и просите его присоединиться к вам в бизнесе. Вы здесь «пользователь» .
  2. Вы даете свое письмо почтовому человеку для доставки. Почтовый человек – это функция «Ajax» .
  3. Ваш друг пишет очень большое «НЕТ» в своем ответе (как грубо), запечатывает письмо и передает его обратно человеку сообщения. Ваш друг – это «сервер» .
  4. Сообщение отправляет вам письмо. Человек, занимавшийся почтой, выполнял свою работу, независимо от того, какой ответ был. Поэтому он считается «успешным» на своей работе. (не забудьте его совет)
  5. Вам решать, кричать, кричать или плакать из-за строгого «НЕТ» вашего друга (обработка ошибок). Это не проблема почтового человека.

Как правильно указывает Джек, поскольку запрос был успешным, вы никогда не столкнетесь с обратным вызовом error . Вам лучше всего обработать все, что ваш сервер вернул в jQuery.ajax() :

 success: (data) => { if('error' in data) { // server returned `error` property in payload - something is wrong! } } 

Если вы не используете ES6:

 success:function(data) { if(data && typeof data.error !== 'undefined') { // show error message to user } }