Есть ли способ заставить PHP возвращать код ошибки AJAX, если PHP-скрипт не работает? Я следовал учебнику и набрал это для своего PHP:
$ return ['error'] = true; $ return ['msg'] = "Не удалось подключиться к БД";
И все было хорошо, пока я не понял, что это данные JSON. Есть ли способ вернуть ошибки, используя стандартные $ _POST и возвращенные данные HTML (как, например, вызвать error:
jQuery AJAX error:
событие?
Я не знаю о jQuery, но если он различает успешные и неудачные (HTTP 200 OK vs. HTTP! = 200) Ajax-запросы, вы можете захотеть, чтобы ваш PHP-скрипт отвечал кодом HTTP, не равным 200:
if ($everything_is_ok) { header('Content-Type: application/json'); print json_encode($result); } else { header('HTTP/1.1 500 Internal Server Booboo'); header('Content-Type: application/json; charset=UTF-8'); die(json_encode(array('message' => 'ERROR', 'code' => 1337))); }
$return = array(); $return['msg'] = "Could not connect to DB"; if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { header('Cache-Control: no-cache, must-revalidate'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Content-type: application/json'); die(json_encode($return)); }
попробуйте это. Надеюсь, поможет.
<!-- This is index.php ---> <html> <head> <script src="js/jquery.js" type="text/javascript"></script><!-- link to jQuery --> <script language="javascript"> $(document).ready(function () { $('input#send').click(function(){ /* Empty div#error and div#result incase they contain info from the last submission */ $('#error').empty(''); $('#result').empty(''); /* Client-side validation */ var name = $("input#name").val(); var age = $("input#age").val(); if (name==''){ alert('Insert your name.'); } else if (age==''){ alert('Insert your age.'); } else { var params = 'name=' + name + '&age=' + age; $.ajax({ url:'b.php', type:'post', dataType:'html', data:params, cache: false, success:data }); function data (html) { var $html = $( html ); // create DOM elements in a jQuery object /* Return errors from 'b.php' */ $html.filter('#err').appendTo("#error"); /* Return valid Post */ $html.filter('#res').appendTo("#result"); /* Clear name input */ $('input#name').val(''); /* Clear age input */ $('input#age').val(''); } } }); }); </script> <style type='text/css'> #error{ color:maroon; font-weight:bold; } #result{ color:green; font-weight:bold; } </style> </head> <body> <div id="error"></div><!-- View Errors --> <div id="result"></div><!-- View valid Post --> <input type='text' name='name' id="name" value='' /><br/ > <input type='text' name='age' id="age" value='' /><br/ > <input type='submit' name='send' id="send" value='Send' /> </body>
.<!-- This is index.php ---> <html> <head> <script src="js/jquery.js" type="text/javascript"></script><!-- link to jQuery --> <script language="javascript"> $(document).ready(function () { $('input#send').click(function(){ /* Empty div#error and div#result incase they contain info from the last submission */ $('#error').empty(''); $('#result').empty(''); /* Client-side validation */ var name = $("input#name").val(); var age = $("input#age").val(); if (name==''){ alert('Insert your name.'); } else if (age==''){ alert('Insert your age.'); } else { var params = 'name=' + name + '&age=' + age; $.ajax({ url:'b.php', type:'post', dataType:'html', data:params, cache: false, success:data }); function data (html) { var $html = $( html ); // create DOM elements in a jQuery object /* Return errors from 'b.php' */ $html.filter('#err').appendTo("#error"); /* Return valid Post */ $html.filter('#res').appendTo("#result"); /* Clear name input */ $('input#name').val(''); /* Clear age input */ $('input#age').val(''); } } }); }); </script> <style type='text/css'> #error{ color:maroon; font-weight:bold; } #result{ color:green; font-weight:bold; } </style> </head> <body> <div id="error"></div><!-- View Errors --> <div id="result"></div><!-- View valid Post --> <input type='text' name='name' id="name" value='' /><br/ > <input type='text' name='age' id="age" value='' /><br/ > <input type='submit' name='send' id="send" value='Send' /> </body>
-<!-- This is index.php ---> <html> <head> <script src="js/jquery.js" type="text/javascript"></script><!-- link to jQuery --> <script language="javascript"> $(document).ready(function () { $('input#send').click(function(){ /* Empty div#error and div#result incase they contain info from the last submission */ $('#error').empty(''); $('#result').empty(''); /* Client-side validation */ var name = $("input#name").val(); var age = $("input#age").val(); if (name==''){ alert('Insert your name.'); } else if (age==''){ alert('Insert your age.'); } else { var params = 'name=' + name + '&age=' + age; $.ajax({ url:'b.php', type:'post', dataType:'html', data:params, cache: false, success:data }); function data (html) { var $html = $( html ); // create DOM elements in a jQuery object /* Return errors from 'b.php' */ $html.filter('#err').appendTo("#error"); /* Return valid Post */ $html.filter('#res').appendTo("#result"); /* Clear name input */ $('input#name').val(''); /* Clear age input */ $('input#age').val(''); } } }); }); </script> <style type='text/css'> #error{ color:maroon; font-weight:bold; } #result{ color:green; font-weight:bold; } </style> </head> <body> <div id="error"></div><!-- View Errors --> <div id="result"></div><!-- View valid Post --> <input type='text' name='name' id="name" value='' /><br/ > <input type='text' name='age' id="age" value='' /><br/ > <input type='submit' name='send' id="send" value='Send' /> </body>
<?php /* This is b.php */ if(($_POST['name']=='')||($_POST['age']=='')){ $error = '<div id="err">Error: Fill in ALL fields.</div>'; } elseif(is_numeric($_POST['name'])){ $error = '<div id="err">Error: Name should NOT contain numbers.</div>'; } elseif(!is_numeric($_POST['age'])){ $error = '<div id="err">Error: Age should ONLY contain numbers.</div>'; } else{ $result = '<div id="res">Hi '.$_POST['name'].', you are '.$_POST['age'].' years old.</div>'; } echo $error; echo $result; ?>
Для простой передачи данных с PHP на AJAX не всегда нужны коды кодирования Json или пары ключей. Его можно просто выполнить с помощью обработки строк.
Ниже приведен пример кода, объясняющего эту функциональность.
$ query = "SELECT email FROM login WHERE email = '". mysqli_real_escape_string ($ conn, $ email). "И пароль = '". mysqli_real_escape_string ($ conn, $ pass). "'"; $ result = mysqli_query ($ conn, $ query); $ Строка = mysqli_fetch_row ($ результат); $ row_cnt = mysqli_num_rows ($ result); $ s_email = $ row [0]; if ($ row_cnt == 1) { $ Ответ = "успех"; } else { $ response = "Недопустимые учетные данные"; } $ Conn-> близко (); $ _SESSION ["email"] = $ s_email; echo $ response;
Этот код показывает, как ответ «успех» отправляется обратно на ajax, вызывающий PHP-код. Далее в ajax для получения ответа можно было бы сделать следующее.
$ .ajax ({type: 'POST', данные: {email: $ ('# email'). val (), пароль: $ ('# pass'). val ()}, url: 'login.php', успех: функция (данные) { if (data == 'success') {// значение, эхо из php, может быть сохранено в переменной данных ajax window.location.assign ( 'upload.php'); } еще { Оповещение (данные); } }, error: function (xhr) { предупреждение ( "ошибка"); } });
Вышеупомянутая концепция может быть расширена, чтобы вернуть МНОГОКРАТНЫЕ ЗНАЧЕНИЯ. Этот метод позволяет простой перенос данных с PHP на AJAX в строчном формате.
Мы должны следовать простому шагу, чтобы повторить все, что нам нужно отправить, как ответ от php на ajax, разделенный уникальным seperator.
echo $ response. #; echo $ email. #; echo $ password. #; echo "Hello". #; эхо «Мир»;
Затем переменные данные в ajax могут быть просто извлечены, как в приведенном выше примере, и простую функцию, например,
var res = data.split ("#");
данные, являющиеся переменной внутри ajax. Затем массив res может использоваться в js для любой цели.