2012-03-13 116 views
1

我不知道我做錯了..jQuery的AJAX與PHP通過JSON返回(登錄形式)

我有2個文件: 的login.php 的index.php

<script type="text/javascript"> 
$(document).ready(function(){ 
$('#btnLogin').bind('click', loginToWebsite); 
}); 
function loginToWebsite(){ 
    $.ajax({ 
    url: "login.php", 
     type: "POST", 
     data: "username=" + $("#username").val()+"&password=" + $("#password").val(), 
    datatype:"json", 
     success: function(status) 
     { 
     if(status.success == false) 
     { 
      $("#loginform").effect("shake", {times:2}, 100); 
      $("#login_message") 
       .attr('class', 'ui-state-error') 
       .html('<strong>ERROR</strong>: Your details were incorrect.<br />'); 
     } 
     else { 
       $("#login_message") 
       .attr('class', 'ui-state-highlight') 
       .html('<strong>PERFECT</strong>: You may proceed. Good times.<br />'); 
      } 
     } 
    }); 
} 
</script> 

登錄.PHP GILE看起來是這樣的:

<?php 
if (isset($_POST['username'])&& isset($_POST['password'])) 
{ 
    if (login ($_POST['username'], $_POST['password'])){ 
     $data = array("success" => true); 
     echo json_encode($data); 
    } 
    else { 
     $data = array("success" => false); 
     echo json_encode($data); 
    } 
}?> 

但我得到了一個未定義回從login.php中(通過JSON)

如果我試圖提醒(status.success)它打印undefined

而且我可以看到我的頭部,用戶名和密碼正在發送到login.php頁面。

PHP函數 登錄()在其他地方實現(返回true或false)

+0

難道status.success正在評估作爲一個字符串,而不是作爲一個布爾值? – PFY 2012-03-13 19:33:06

+0

嗯 - 我試圖只是排除故障,只是爲了提醒login.php的輸出 - 而且還說未定義。 我也試過把它寫成: $ data = array(「success」=>「something」); 它仍然不確定:S – Pzoco 2012-03-13 22:57:54

回答

2

似乎通過變量「狀態」的值傳遞給JavaScript是一個字符串。所以你必須將字符串轉換爲json對象。要將字符串轉換爲json對象,請使用以下腳本。使用最新的jQuery庫,因爲較舊的使用不同的函數將字符串轉換爲json。

 

    var obj = jQuery.parseJSON(status); 
    alert(obj.success); 

+1

sugunan - 你剛剛救了我的一天! 它工作:) - 非常感謝! – Pzoco 2012-03-14 20:34:00

0

我想你已經在你的PHP腳本輸出壞事,它不能被解析爲JSON。

  1. 嘗試使用一些調試Web代理(http://www.charlesproxy.com/例如,有一個免費的演示)

  2. 添加控制檯跟蹤,看看數據

    成功:功能(狀態) { console.log(status); // ...函數體 }

+0

感謝deaDrunk :) 所以你說什麼 - 是代碼是正確的 - 別的東西是怎麼回事腥.. 我會檢查你的鏈接 - 但首先明日(這花了我4小時'嘗試修復') – Pzoco 2012-03-13 20:58:06

0

你在php文件中的代碼是不正確

if login = false 
{ 
$data['success'] = false; 
echo json_encode($data); 
} 
else { 
$data['success'] = true; 
echo json_encode($data); 
}