ajax, как вернуть сообщение об ошибке из файла PHP

В тот момент, когда я наводил курсор на любое слово, всегда отображается черный ящик. Если PHP-код возвращает текст, он отображается в черном поле (которое должно быть). Однако я хочу, чтобы он возвращал функцию ошибки, если текст не возвращен, поэтому я могу позже изменить CSS для черного ящика, чтобы он имел ширину 0px вместо 400px .

 var x = ($(this).text()); $.ajax({ type: 'POST', url: 'process.php', data: { text1: x }, success: function(response){ $('#tooltip').text(response); } }); 
 try { $db = new PDO('sqlite:ordbas.db'); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $err) { echo "PDO fel $err"; } if (isset($_POST['text1'])) { $text1 = $_POST['text1']; $results = $db->prepare("SELECT forord FROM words WHERE sokord='$text1'"); $results->execute(); $row = $results->fetch(); echo $row[0]; } конечные try { $db = new PDO('sqlite:ordbas.db'); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $err) { echo "PDO fel $err"; } if (isset($_POST['text1'])) { $text1 = $_POST['text1']; $results = $db->prepare("SELECT forord FROM words WHERE sokord='$text1'"); $results->execute(); $row = $results->fetch(); echo $row[0]; } 

Как вы могли подумать, есть какой-то неважный код, который я забыл. Надеюсь, кто-то может понять и помочь мне! Благодаря!

Вот как вы можете это сделать:

Очень простой способ:

В ВАШЕМ ФАЙЛЕ PHP:

 if ($query) { echo "success"; //anything on success } else { die(header("HTTP/1.0 404 Not Found"); //Throw an error on failure } 

В ВАШЕЙ jQuery AJAX SIDE:

 var x = ($(this).text()); $.ajax({ type: 'POST', url: 'process.php', data: { text1: x }, success:function(data) { alert(data); //=== Show Success Message== }, error:function(data){ alert("error occured"); //===Show Error Message==== } }); 

$.ajax fail в $.ajax используется для сбора любых неудачных результатов.

показать / скрыть ошибку div на основе успеха / отказа, возвращенного из сценария сервера.

HTML-код:

  <div class="error"><div> 

CSS:

  .error { color: red; } 

JS CODE:

 //hide error before ajax call $('.error').hide(); $.ajax(...) .done:function(){ ... } .fail: function(jqXHR, textStatus, errorThrown){ $('.error').text(errorThrown); $('.error').show(); } 

Примечание. .success() & .error() устарели из jquery 1.8, поэтому не используйте их.

Уведомление об изнашивании: обратные вызовы jqXHR.success (), jqXHR.error () и jqXHR.complete () устаревают с jQuery 1.8. Чтобы подготовить код для их возможного удаления, вместо этого используйте jqXHR.done (), jqXHR.fail () и jqXHR.always ().

В вашем улове вы можете положить

 header('Content-type: application/json'); echo json_encode(array('Error' => 'PDO fel "$err"')); 

Используйте функцию PHP json_encode для массива. Затем массив будет представлен javascript как объект JSON (аргумент / параметр ответа).

Другими словами:

PHP:

 // important to tell your browser what we will be sending header('Content-type: application/json; charset=utf-8'); ... bla bla code ... // Check if this has gone right $success = $results->execute(); $row = $results->fetch(); $html = $row[0]; $result = [ 'success' => $success, 'html' => $html, ]; print json_encode($result); 

JavaScript:

 // You may now use the shorthand $.post('process.php', { text1: x }, function(response) { if (response.success) { $('#tooltip').text(response.html); } else { ... show error ... } }); 

Во-первых , вам нужно сообщить javascript, что на стороне сервера произошла ошибка

 try { $db = new PDO('sqlite:ordbas.db'); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $err) { // Set http header error header('HTTP/1.0 500 Internal Server Error'); // Return error message die(json_encode(array('error' => 'PDO fel '.$err->getMessage()))); } 

Во-вторых , вам нужно обрабатывать ошибки при загрузке json

 var x = ($(this).text()); $.ajax({ type: 'POST', url: 'process.php', data: { text1: x } }) // This will be called on success .done(function(response){ $('#tooltip').text(response); }) // This will be called on error .fail(function(response){ // Error catched, do stuff alert(response); }); 
 $.ajax({ url: "file_name.php", method: "POST", data: $("#form_id").serialize(), success: function () { alert("success"); //do something }, error: function () { alert("doh!"); // do something else } }); 

Это пример запросов POST, касающихся чувствительных данных формы (или данных, которые вы будете связывать с запросом UPDATE или INSERT, например). Я включил функцию serialize () для обработки полей имени из формы на вашем конце. Я также удалил передачу данных через функцию успеха. Вы не хотите этого делать, когда имеете дело с конфиденциальными данными или данными, которые вы не планируете отображать. Фигурированный, я бы опубликовал это здесь, так как этот поток появился, когда я искал, как делать POST с AJAX, который возвращает ошибку.

Говоря о возврате ошибки, вы захотите сделать это вместо этого, когда PHP снова обновится. Я также рекомендую читать через документы 5.4+.

 http_response_code(404); die(); 

Я бросил функцию die (), чтобы убедиться, что ничего не произойдет после запроса вашего 404.

Попробуйте вместо этого следующий фрагмент:

 var x = ($(this).text()); $.ajax({ type: 'POST', url: 'process.php', data: { text1: x }, success: function(response){ $('#tooltip').text(response); }, error: function(error) { console.log(error); } });