2013-02-15 2 views
0

У меня есть простая, но работающая форма AJAX с использованием jQuery. Форма проверяется с помощью jQuery перед отправкой, а затем после успешной отправки снова с PHP.Отправка данных с PHP на jQuery

Единственная проблема - обработка ошибок. Когда PHP-проверка вернет, что все поля в порядке, я показываю сообщение об успешном завершении. Если произошла ошибка, я просто показываю «была ошибка».
Как я могу отправить данные с PHP на jQuery, поэтому недопустимые поля могут быть помечены как недопустимые?

Или такая форма обработки ошибок не нужна, поскольку динамическая подсветка требует включения JavaScript, и если JavaScript включен, форма не может быть отправлена ​​неправильно?

В основном, мои действительные чеки выглядеть следующим образом (упрощенный конечно):

function checkSomething($something) { 

     $valid = true; 

     if (strlen($something) === 0) { 
      $valid = false; 
     } 


     return $valid; 
} 

В конце сценария, я делаю это так:

if (checkSomething($something) && checkThis($this) && checkThat($that)) { 
    echo "success"; 
} else { 
    echo "error"; 
} 

И в моем JavaScript/JQuery код выглядит следующим образом:

$.ajax({ 
    url: "form.php", 
    type: "POST", 
    data: string, 
     success: function (result) { 
      if (result == "success") { 
       alert("success");      
      } else { 
       alert("error"); 
      } 
     } 
}); 
+0

Вам нужно еще что-то повторить с PHP, который сообщает вам, что не удалось, а затем обработать этот ответ с помощью JS, чтобы показать, какое сообщение подходит. Отправьте некоторый код и покажите нам, как вы его настроили сейчас, и вам будет легче помочь. – adeneo

+0

Если у вас включена проверка JQuery и включена JS, ваша проверка PHP, вероятно, никогда не вступит в игру (это только для предосторожности). Другими словами, если ваша проверка на стороне клиента работает, ваша проверка на стороне сервера не будет иметь никаких сообщений для отправки. Если ваша проверка на стороне клиента отключена или обойдена, ваша проверка на стороне сервера будет принята во внимание. Если JS-клиент отключен, вы все равно не можете отправлять сообщения через jQuery. Покажите код. – Sparky

+0

Он все равно должен вернуть ответ JSON. В случае, если это исключено, это не означает, что Javascript отключен. Даже если это так, он должен вернуть ответ JSON, который будет просто отображаться в тексте в браузере, если Javascript отключен. – crush

ответ

1

Ваше представление форма имеет 3 шага: JavaScript Validation & Подчинение, PHP проверки/Обработка и JavaScript на полной («так недопустимые поля могут быть отмечены как недействительные»)

Похоже, у вас есть шаг 1 завершен и большая часть шага 2.

В вашем PHP-коде у вас должна быть некоторая структура данных, предпочтительно массив, который содержит недопустимые значения. Вы можете вернуть эти данные в браузере, echo`ng его в браузер

<?php 
... 
... 
if(count($invalidFieldArray)){ 
    echo json_encode(array('status' => 'Fail', 
          'data' => $invalidFieldArray)); 
}else{ 
    echo json_encode('status' => 'Success'); 
} 

Код выше возвращает успех/неудачу в форму JavaScript.

Я лично использую jQuery form plugin для обработки представлений форм, и я рекомендую вам попробовать. В нем много хороших функций.

$.ajax({ 
    url: "form.php", 
    type: "POST", 
    data: string, 
    dataType: json, 
     success: function (result) { 
      if (result.status === "Success") { 
       alert("success");      
      } elseif (result.status === 'Fail'){ 
       for (field in result.data) { 
         /* Invalid field handling */ 
         ... 
       } 
      } 
     } 
}); 

Совет: Немного не по теме, но при использовании сравнений в JavaScript всегда использовать тройное равно (===), дважды равно (==) не то же самое в JavaScript, как и в других языках; JavaScript делает принуждение с двойными равными, что обеспечивает противоречивые результаты.

+0

Круто, спасибо! Полагаю, я наконец понял, как это работает. Но все-таки я получаю ошибку PHP «Ошибка синтаксиса: ошибка синтаксиса, неожиданный T_DOUBLE_ARROW». Я также попробовал ':' вместо '=>' без всякой удачи. $ invalidFieldArray выглядит следующим образом: 'Array ([name] => Введите имя. [email] => Вам нужно ввести адрес электронной почты. [message] => Введите сообщение.)' У вас есть идея, что происходит или это слишком сложно сейчас? – Sven

+0

Не знаю, что там произошло, теперь это работает :) – Sven

0

Вам может отправить данные из PHP и хранить их в URL-адресах, например, url.com/#value=1

1

Я думаю, что у вас должна быть только одна служба в PHP. Вы отправляете данные из формы, если есть какие-либо недопустимые данные, вы можете захотеть вернуть JSON, указывающий, какие поля ошибочны, чтобы вы могли его разобрать и показать. Если все будет хорошо, вы просто просто покажете это сообщение об успешности.

Я не уверен, что у меня есть ваша проблема.

+0

Это лучшее из двух предложений. Верните JSON с полями и сообщение об ошибке для каждого поля, которое вы хотите отобразить. – crush

Смежные вопросы