В тот момент, когда я наводил курсор на любое слово, всегда отображается черный ящик. Если 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); } });