2013-04-22 127 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