2011-02-28 44 views
12

我一直在尋找解決方案,但我找不到任何可行的方法。 我想從數據庫中獲取一堆數據,然後通過表單中的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); 

     } 

    }); 

} 

和 「內容/ 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); 

    } 
+1

嘗試提醒(JSON.stringify(錯誤)),因爲它應該在警報對話框中顯示有關錯誤的更多信息 – 2011-02-28 21:06:20

+0

我猜在JSON被回顯之前有一個PHP錯誤。檢查你的獲取函數,你正在尋找數據$ row ['key'],所以你應該使用mysql_fetch_assoc來代替,我相信。 更改'$ row = mysql_fetch_array($ result);'到 '$ row = mysql_fetch_assoc($ result);' ,看看它是否有效。 – 2011-02-28 21:06:38

+0

注意:如果以前沒有過濾,您很容易受到SQL注入的攻擊。 – Andrea 2011-02-28 21:11:13

回答

24

我想我知道這一個...

嘗試使用PHP的header()功能發送您的JSON作爲JSON:

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

儘管您傳遞的是有效的JSON,但jQuery的$ .ajax並不這麼認爲,因爲它缺少標題。

jQuery過去沒有標題就沒問題,但它被改回了幾個版本。

ALSO

確保您的腳本返回有效JSON。使用FirebugGoogle Chrome's Developer Tools在控制檯中檢查請求的響應。

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; 

} 
+0

嗨麥克黑比,感謝您的迅速回復!不幸的是,這也沒有工作... – Piotr 2011-02-28 21:13:10

+0

我已經更新了上面的答案,包括代碼更新。檢查以確保您的查詢返回結果並且錯誤不會破壞JSON響應。 – McHerbie 2011-02-28 21:19:28

+0

此外,嘗試將$ replace參數傳遞給header:header(「Content-Type:application/json」,true); – McHerbie 2011-02-28 21:20:38

9

嘗試使用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); 
} 
+0

成功函數返回空數據,如果我設置'dataType:'json'',否則將完整的json元素打印到html中,就像這樣'[{「id」:「1001」,「full_name」:「raju」}]''。 – 151291 2015-11-03 10:27:38

2

除了McHerbie的筆記,嘗試json_encode($json_arr, JSON_FORCE_OBJECT);如果你在PHP 5.3 ...

+0

謝謝Shehi,那恐怕沒有做到。 – Piotr 2011-02-28 21:15:19

5

$.ajaxerror函數有三個參數,而不是一個:

error: function(xhr, status, thrown) 

你需要傾倒第二和第三個參數找到你的原因,而不是第一個。

+1

嗨Alnitak謝謝,這是什麼狀態和拋出:'parsererror - jQuery150010872808285057545_1298928988511不叫'你有什麼建議嗎? – Piotr 2011-02-28 21:37:55

+0

是的,Alnitak,我也很好奇。有類似的問題.. – 2011-12-16 21:01:28

0

如果您使用的是更新的版本(超過1.3.x),您應該瞭解更多關於parseJSON功能的信息!我遇到了同樣的問題。使用舊版本或修改代碼

success=function(data){ 
    //something like this 
    jQuery.parseJSON(data) 
} 
0
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> 
1
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); 

       } 
        }); 
0

那麼,它可能會幫助別人。我很愚蠢地把var_dump('testing');放在我請求JSON的函數中,以確保實際上收到了請求。這顯然也是回聲,作爲預期的json響應的一部分,並且dataType設置爲json定義,請求失敗。