Условие отправки для ajax

#php #html #ajax

Вопрос:

У меня есть html-форма и скрипт ajax, который отправляет ее без обновления страницы, у меня также есть проверка того, что две одинаковые даты публикации не попадают в базу данных, но когда я нажимаю «Отправить», он все равно пишет «форма была отправлена», помогите мне это исправить

Вот мой сценарий

 lt;htmlgt; lt;headgt; lt;script src="http://code.jquery.com/jquery-1.9.1.js"gt;lt;/scriptgt;  lt;scriptgt;  $(function () {   $('#my_form').on('submit', function (e) {   e.preventDefault();   $.ajax({  type: 'POST',  url: '/main/store',  data: $('#my_form').serialize(),  success: function () {  alert('form was submitted');  }  });  });  }); lt;/scriptgt; lt;/headgt;  

Комментарии:

1. Это проблема с кодом на стороне сервера-вывод в клиенте зависит от того, что вы отправляете обратно с сервера. Если есть дубликат отправьте ответ, в результате которого обратный вызов ajax отобразит другое сообщение

2. Я хотел знать, как создать условие для отображения сообщения в ajax, если запись уже существует

3. Я понимаю, что вы хотите сделать — я предлагаю вам отправлять разные ответы из вашего PHP-скрипта ( /main/store ) на основе результатов проверки даты. Затем измените обратный вызов (обратный вызов ajax), чтобы обработать эти данные ответа и, таким образом, контролировать, что является alerted для пользователя

4. Хорошо, я постараюсь, спасибо

5. Если вы добавите PHP-код, который проверяет дату, вам будет легче показать подход, который я пытался описать

Ответ №1:

Не зная данных, которые вы отправляете в запросе ajax, или того, как вы обрабатываете запрос на сервере, вам нужно будет адаптировать следующий полу-псевдокод в соответствии с вашими потребностями или просто разработать собственное решение, используя некоторые из них.

По сути, обратный вызов ajax должен получать данные с сервера. В вашем коде обратный вызов не содержит аргументов — добавьте переменную, success: function () {... аналогичную success: function(r) {... , чтобы ответ от сервера теперь был назначен r

С помощью этого ответа вы теперь можете отображать пользователю другое сообщение, основанное на значении r . Например:

 lt;?php  /****************  /main/store  */  if( $_SERVER['REQUEST_METHOD']=='POST' ){    require 'dbconn.php';      /* example pseudo function to test date */  function date_is_duplicate( $date ){  global $db; // your db connection variable    $sql='select * from `TABLE` where `DATEFIELD`=?';  $stmt=$db-gt;prepare( $sql );  $stmt-gt;bind_param('s',$date);  $stmt-gt;execute();  $stmt-gt;store_result();  $rows=$stmt-gt;num_rows;  $stmt-gt;free_result();  $stmt-gt;close();    /*  ..... etc, etc, etc and return a value to be used in ajax callback   If there are ZERO rows send ZERO as response - or more than ZERO means duplicate  */  return $rows;  }      /* Do the Duplicate Date search tests */  $result=date_is_duplicate( $_POST['date'] );  if( $result ) exit( $result );  else{  /*   do other exciting things - add to db etc etc but SEND a response to the  ajax callback so that it can display the correct message.  send ZERO as response.  */  }  } ?gt;  

А затем модифицированный javascript, содержащий переменную ответа, которая помогает развить логику программы:-

 $(function(){  $('#my_form').on('submit', function(e){  e.preventDefault();  $.ajax({  type: 'POST',  url: '/main/store',  data: $('#my_form').serialize(),  success:function(r) {    let message='OK, form was submitted';  if( Number(r)===1 )message='Bogus, duplicate date detected';    alert(message);  }  });  }); });  

Гораздо более надежной структурой данных для отправки обратно был бы JSON, а не одно целое число — это было поспешно собрано вместе, чтобы проиллюстрировать концепцию. С помощью JSON вы можете создать более сложное решение