2013-04-22 125 views
1

我是一個n00b試圖通過在線教程學習jquery .ajaxjquery`.ajax`不工作

我有以下的在我的本地的「客戶」代碼:

<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title></title> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.js"></script> 
    <script> 
     // wait for the DOM to be loaded 
     $(document).ready(function() { 
      $("#submit_btn").click(function(){ 
       $.ajax({ 
         type: "POST", 
         url: "response.php", 
         dataType: 'json', 
         data: { name: "John", location: "Boston" } 
       }).done(function(msg) 
       { 
        alert("Data Saved: " + msg); 
       }); 
      }); 
     }); 
    </script> 
</head> 
<body> 
    <input type="submit" name="submit" class="button" id="submit_btn" value="Send" /> 
</body> 
</html> 

而且我有以下我的「服務器」端文件的代碼稱爲「response.php」:

<?php 
if (isset($_POST)) 
{ 
$answer = $_POST; 
echo json_encode($answer); 
} else { 
echo json_encode("no good"); 
} 
?> 

當我點擊'發送'按鈕時,我收到一條警告,提示「數據已保存:[對象對象]」。我試圖通過使用click事件來顯示通過`post'提交的數據。我希望警報顯示'姓名:'約翰',位置:'波士頓''。

+0

檢查控制檯的任何錯誤,它可能會拋出一個解析錯誤 – 2013-04-22 03:31:35

+1

我不是一個PHP的人,還是我對'json_encode疑慮(「不良」)'給一個JSON O/p – 2013-04-22 03:32:04

+0

是你的要求給予'不好'作爲迴應 – 2013-04-22 03:32:52

回答

2

"Data Saved: " + msg.name + " " + msg.location

你收到什麼是JSON對象,因此在打印物體在javascript打印[object Object]。您應該使用.(點)運算符來訪問您的對象的屬性以獲取名稱和位置。

假設,你的反應是以下JSON對象:

msg = { name : "John", last_name : "Doe" }

訪問您msg對象的name屬性使用點運算符:

console.log(msg.name);

爲了使你的代碼的通用,你應該能夠以某種方式告訴客戶該請求是好還是壞。所以,你可以發送status回到這樣的:在客戶端上

<?php 
if (isset($_POST)) 
{ 
$answer = $_POST; 
$answer['status'] = true; 
echo json_encode($answer); 
} else { 
echo json_encode(array('status' => false, 'msg' => 'no good')); 
} 
?> 

你會檢查status

function(response) { 
    if (response.status) { 
    console.log('yep, post was submitted, name is ' + response.name + ', location is ' + response.location); 
    } 
    else { 
    console.log('something went wrong: ' + response.msg); 
    } 
} 

UPDATE

還有一兩件事:一旦你決定使用JSON,不要發送text/plain回來。這正是你在這裏做什麼:

echo json_encode("no good");

這個代碼生成字符串"no good"這是text/plain,但不是有效的JSON對象。

Take a look at what JSON is

+0

+1的好解釋。 – Swarne27 2013-04-22 03:38:12

+0

@Nemoden,非常感謝。然而,我對客戶端的'功能(響應)'感到困惑。 '響應'是否與服務器端文件的名稱有關:「response.php」? – dwstein 2013-04-22 04:06:24

+0

nope,它只是一個回調函數的參數。可能是任何事情。 – Nemoden 2013-04-22 04:07:17