jQuery $ .ajax запрос dataType json не будет извлекать данные из скрипта PHP

Я искал все решения, но я не могу найти ничего, что сработает. Я пытаюсь получить кучу данных из базы данных, а затем через поля ввода автозаполнения AJAX в форме. Для этого я решил использовать json, потому что почему бы и нет, не так ли? В качестве альтернативы я подумывал просто отправить обратно строку с разделителями, а затем подделать ее, что взамен было бы намного проще и избавило меня от головной боли … Так как я решил использовать json, я думаю, что я следует придерживаться его и выяснить, что пошло не так! Случается, что когда выполняется get_member_function (), в диалоговом окне предупреждения появляется сообщение об ошибке «[object Object]». Я попробовал это также с помощью запроса GET и установил contentType в «application / json; кодировка = UTF-8 ". Увы, без кубиков. Кто-нибудь может предложить, что я делаю неправильно? Позаботься, Петр.

Моя функция javascript / jQuery выглядит следующим образом:

function get_member_info() { var url = "contents/php_scripts/admin_scripts.php"; var id = $( "select[ name = member ] option:selected" ).val(); $.ajax( { type: "POST", dataType: "json", url: url, data: { get_member: id }, success: function( response ) { $( "input[ name = type ]:eq( " + response.type + " )" ).attr( "checked", "checked" ); $( "input[ name = name ]" ).val( response.name ); $( "input[ name = fname ]" ).val( response.fname ); $( "input[ name = lname ]" ).val( response.lname ); $( "input[ name = email ]" ).val( response.email ); $( "input[ name = phone ]" ).val( response.phone ); $( "input[ name = website ]" ).val( response.website ); $( "#admin_member_img" ).attr( "src", "images/member_images/" + response.image ); }, error: function( error ) { alert( error ); } } ); } 

и соответствующий код в «contents / php_scripts / admin_scripts.php» выглядит следующим образом:

  if( isset( $_POST[ "get_member" ] ) ) { $member_id = $_POST[ "get_member" ]; $query = "select * from members where id = '$member_id'"; $result = mysql_query( $query ); $row = mysql_fetch_array( $result ); $type = $row[ "type" ]; $name = $row[ "name" ]; $fname = $row[ "fname" ]; $lname = $row[ "lname" ]; $email = $row[ "email" ]; $phone = $row[ "phone" ]; $website = $row[ "website" ]; $image = $row[ "image" ]; $json_arr = array( "type" => $type, "name" => $name, "fname" => $fname, "lname" => $lname, "email" => $email, "phone" => $phone, "website" => $website, "image" => $image ); echo json_encode( $json_arr ); } 

Кажется, я знаю это …

Попробуйте отправить JSON как JSON с помощью функции header () PHP:

 /** * Send as JSON */ header("Content-Type: application/json", true); 

Хотя вы передаете действительный JSON, jQuery $ .ajax не думает так, потому что ему не хватает заголовка.

jQuery был хорошо без заголовка, но он был изменен на несколько версий.

ТАКЖЕ

Убедитесь, что ваш скрипт возвращает действительный JSON. Используйте Firebug или инструменты разработчика Google Chrome, чтобы проверить ответ запроса в консоли.

ОБНОВИТЬ

Вы также захотите обновить свой код для дезинфекции $ _POST, чтобы избежать атак с SQL-инъекциями. Кроме того, вы можете обнаружить некоторые ошибки.

 if (isset($_POST['get_member'])) { $member_id = mysql_real_escape_string ($_POST["get_member"]); $query = "SELECT * FROM `members` WHERE `id` = '" . $member_id . "';"; if ($result = mysql_query( $query )) { $row = mysql_fetch_array($result); $type = $row['type']; $name = $row['name']; $fname = $row['fname']; $lname = $row['lname']; $email = $row['email']; $phone = $row['phone']; $website = $row['website']; $image = $row['image']; /* JSON Row */ $json = array( "type" => $type, "name" => $name, "fname" => $fname, "lname" => $lname, "email" => $email, "phone" => $phone, "website" => $website, "image" => $image ); } else { /* Your Query Failed, use mysql_error to report why */ $json = array('error' => 'MySQL Query Error'); } /* Send as JSON */ header("Content-Type: application/json", true); /* Return JSON */ echo json_encode($json); /* Stop Execution */ exit; } 

Попробуйте использовать jQuery.parseJSON, когда вы вернете данные.

 type: "POST", dataType: "json", url: url, data: { get_member: id }, success: function(data) { response = jQuery.parseJSON(data); $("input[ name = type ]:eq(" + response.type + " )") .attr("checked", "checked"); $("input[ name = name ]").val( response.name); $("input[ name = fname ]").val( response.fname); $("input[ name = lname ]").val( response.lname); $("input[ name = email ]").val( response.email); $("input[ name = phone ]").val( response.phone); $("input[ name = website ]").val( response.website); $("#admin_member_img") .attr("src", "images/member_images/" + response.image); }, error: function(error) { alert(error); } 

Функция error $.ajax принимает три аргумента, а не одну:

 error: function(xhr, status, thrown) 

Вам нужно сбросить 2-й и 3-й параметры, чтобы найти причину, а не первую.

В дополнение к примечанию Макерби, попробуйте json_encode( $json_arr, JSON_FORCE_OBJECT ); если вы используете PHP 5.3 …

  session_start(); include('connection.php'); /* function msg($subjectname,$coursename,$sem) { return '{"subjectname":'.$subjectname.'"coursename":'.$coursename.'"sem":'.$sem.'}'; }*/ $title_id=$_POST['title_id']; $result=mysql_query("SELECT * FROM `video` WHERE id='$title_id'") or die(mysql_error()); $qr=mysql_fetch_array($result); $subject=$qr['subject']; $course=$qr['course']; $resultes=mysql_query("SELECT * FROM course JOIN subject ON course.id='$course' AND subject.id='$subject'"); $qqr=mysql_fetch_array($resultes); $subjectname=$qqr['subjectname']; $coursename=$qqr['coursename']; $sem=$qqr['sem']; $json = array("subjectname" => $subjectname, "coursename" => $coursename, "sem" => $sem,); header("Content-Type: application/json", true); echo json_encode( $json_arr ); $.ajax({type:"POST", dataType: "json", url:'select-title.php', data:$('#studey-form').serialize(), contentType: "application/json; charset=utf-8", beforeSend: function(x) { if(x && x.overrideMimeType) { x.overrideMimeType("application/j-son;charset=UTF-8"); } }, success:function(response) { var response=$.parseJSON(response) alert(response.subjectname); $('#course').html("<option>"+response.coursename+"</option>"); $('#subject').html("<option>"+response.subjectname+"</option>"); }, error: function( error,x,y) { alert( x,y ); } }); в  session_start(); include('connection.php'); /* function msg($subjectname,$coursename,$sem) { return '{"subjectname":'.$subjectname.'"coursename":'.$coursename.'"sem":'.$sem.'}'; }*/ $title_id=$_POST['title_id']; $result=mysql_query("SELECT * FROM `video` WHERE id='$title_id'") or die(mysql_error()); $qr=mysql_fetch_array($result); $subject=$qr['subject']; $course=$qr['course']; $resultes=mysql_query("SELECT * FROM course JOIN subject ON course.id='$course' AND subject.id='$subject'"); $qqr=mysql_fetch_array($resultes); $subjectname=$qqr['subjectname']; $coursename=$qqr['coursename']; $sem=$qqr['sem']; $json = array("subjectname" => $subjectname, "coursename" => $coursename, "sem" => $sem,); header("Content-Type: application/json", true); echo json_encode( $json_arr ); $.ajax({type:"POST", dataType: "json", url:'select-title.php', data:$('#studey-form').serialize(), contentType: "application/json; charset=utf-8", beforeSend: function(x) { if(x && x.overrideMimeType) { x.overrideMimeType("application/j-son;charset=UTF-8"); } }, success:function(response) { var response=$.parseJSON(response) alert(response.subjectname); $('#course').html("<option>"+response.coursename+"</option>"); $('#subject').html("<option>"+response.subjectname+"</option>"); }, error: function( error,x,y) { alert( x,y ); } }); 

Если вы используете более новую версию (более 1.3.x), вы должны узнать больше о функции parseJSON! Я испытал ту же проблему. Используйте старую версию или измените свой код.

 success=function(data){ //something like this jQuery.parseJSON(data) } 
 Try this... <script type="text/javascript"> $(document).ready(function(){ $("#find").click(function(){ var username = $("#username").val(); $.ajax({ type: 'POST', dataType: 'json', url: 'includes/find.php', data: 'username='+username, success: function( data ) { //in data you result will be available... response = jQuery.parseJSON(data); //further code.. }, error: function(xhr, status, error) { alert(status); }, dataType: 'text' }); }); }); </script> <form name="Find User" id="userform" class="invoform" method="post" /> <div id ="userdiv"> <p>Name (Lastname, firstname):</p> </label> <input type="text" name="username" id="username" class="inputfield" /> <input type="button" name="find" id="find" class="passwordsubmit" value="find" /> </div> </form> <div id="userinfo"><b>info will be listed here.</b></div> 

Ну, это может помочь кому-то. Я был настолько глуп, чтобы ставить var_dump('testing'); в функции, в которой я запрашивал JSON, чтобы убедиться, что запрос был фактически получен. Это, очевидно, также как эхо, как часть ожидаемого ответа json , и с установленным значением dataType определенным json , запрос терпит неудачу.