Показать сообщение отдельно
  #13 (permalink)  
Старый 10.10.2017, 10:06
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от KateU
Даже не вериться...
Да нет ничего сверх естественного в этом, наоборот, это закономерность.
Обмен с сервером происходит в формате JSON и если до его или после его передачи будет любой вывод в браузер, то на клиенте в итоге получится невалидный json. jQuey в этом случае конечно же генерирует ошибку, но она передается не первым аргументом функции в success. Первый аргумент этой функции, это данные возвращенные сервером и в случае json, это будет объект - результат его декодирования. Но при ошибке этот аргумент будет пуст. Вы же не проверяете ошибок, видите что ничего нет, и вам и кажется, что сервер не отвечает, хотя на самом деле ответ есть (его можно и в отладчике браузера увидеть).

Проверить можно было бы и так - dataType: 'text' на время проверки, и вы увидите json-строку, но по ней вряд ли можно определить валидная ли она если "мусор" передающийся с ней, это непечатные символы: пробелы, переносы строк, ВОМ и т.п.

И зачем дважды прописывать операции - exit(json_encode... Определили по условиям данные, а затем вывод их один раз прописанный. В данном случае тернарный оператор более лаконичен, хотя это и не важно.

Если скрипт пишется под версию 5.4 и выше, то можно меньше нагружать пальцы свои, объявляя массивы точно также как это можно и в JS - ["ok" => 2, "message_text" => "n"]; вместо array("ok" => 2, "message_text" => "n");

А это просто замечание:

Один бит может иметь два состояния, двумя битами можно описать четыре состояния. То есть значением одной переменной "ok" можно описать два условия, а двумя - "ok" и "message_text" четыре. У вас же переменная "ok" уже сообщает клиенту результат выполнения, зачем при этом нужен "message_text", который в любом случае имеет одно и тоже значение?

$('#calc-project-submit1').validationEngine('showPrompt', 'Ошибка отправки данных. Попробуйте позже.'); - сподручнее это текст как раз и определять серверу причем не в скриптах обработчиках, а как определенные переменные сообщений, значений и т.п., дабы и в клиентских скриптах не оперировать строками, которые в случае их замены придется искать и править. И это как раз и можно было бы определять как ["ok" => 2, "message_text" => $error];, а в случае удачи ее просто не будет - не нужна, или же есть но сообщает о "Спасибо, ваш вопрос успешно отправлен" - ["ok" => 1, "message_text" => $message_mail];.

Последний раз редактировалось laimas, 10.10.2017 в 10:10.
Ответить с цитированием