Возвращать ошибки с PHP через. AJAX?

Есть ли способ заставить PHP возвращать код ошибки AJAX, если PHP-скрипт не работает? Я следовал учебнику и набрал это для своего PHP:

 $ return ['error'] = true;
 $ return ['msg'] = "Не удалось подключиться к БД";

И все было хорошо, пока я не понял, что это данные JSON. Есть ли способ вернуть ошибки, используя стандартные $ _POST и возвращенные данные HTML (как, например, вызвать error: jQuery AJAX error: событие?

Solutions Collecting From Web of "Возвращать ошибки с PHP через. AJAX?"

Я не знаю о 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 для любой цели.