dataType json的jQuery $ .ajax请求不会从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 ); } 

我想我知道这个……

尝试使用PHP的header()函数将JSON作为JSON发送:

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

虽然你传递的是有效的JSON,但jQuery的$ .ajax并不这么认为,因为它缺少标题。

jQuery曾经很好没有标题,但它改回了几个版本。

确保您的脚本返回有效的JSON。 使用Firebug或Google Chrome的开发人员工具在控制台中检查请求的响应。

UPDATE

您还需要更新代码以清理$ _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); } 

$.ajax error函数有三个参数,而不是一个:

 error: function(xhr, status, thrown) 

你需要转储第二个和第三个参数来找到你的原因,而不是第一个。

除了McHerbie的注释,请尝试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(""); $('#subject').html(""); }, error: function( error,x,y) { alert( x,y ); } }); 

如果您使用的是较新版本(超过1.3.x),您应该了解有关函数parseJSON的更多信息! 我遇到了同样的问题。 使用旧版本或更改代码

 success=function(data){ //something like this jQuery.parseJSON(data) } 
 Try this...  

Name (Lastname, firstname):

info will be listed here.

嗯,这可能对某人有所帮助。 我很愚蠢地把var_dump('testing'); 在我请求JSON的函数中,以确保实际收到请求。 这显然也是echo作为预期的json响应的一部分,并且dataType设置为json定义,请求失败。