Сообщение от 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];.