2010-04-26 49 views
3

我无法得到响应,从一个jQuery Ajax调用回...jQuery的获得阵列的详细信息

(这是一个脚本来验证用户身份,并需要返回他们的名字和用户ID。我的理解是我可以对其进行编码,如JSON和下面的格式获取数据。

它的警报()

的JavaScript

返回的“不确定”的错误
$.ajax({ 
type: "POST", 
url: "myURL.php", 
data: {username: username, password: password}, 
success: function(results) { 
    //THIS IS WHERE THE PROBLEM IS 
    alert('Hi '+results.name); //Should be "Hi Basil Fawlty" 
    } 
}); 

的PHP(myURL.php)

//This comes from a SQL call that returns the following name 
json_encode(array(
'id'=>1, 
'name'=>'Basil Fawlty' 
)); 

在哪里我错了,将不胜感激任何帮助或想法!

谢谢。

解决方案:解决方案是添加dataType。

+0

您使用的是哪个版本的jQuery? – webbiedave 2010-04-26 18:10:55

+1

你可以在这里发布你的** alert(results.responceText)**吗? – 2010-04-26 19:10:21

+0

我使用的是1.3版本。 输出“未定义” – Matt 2010-04-27 03:26:22

回答

4

你错过dataType: "json"

$.ajax({ 
type: "POST", 
url: "myURL.php", 
dataType: "json", 
data: {username: username, password: password}, 
success: function(results) { 
    //THIS IS WHERE THE PROBLEM IS 
    alert('Hi '+results.name); //Should be "Hi Basil Fawlty" 
    } 
}); 

另一个(更简洁)的选择是jQuery.getJSON如果你知道你得到JSON。

+0

感谢您的快速回复! – Matt 2010-04-27 03:28:40

1

务必将dataType设置为JSON让您得到响应对象的成功方法,像这样:

$.ajax({ 
type: "POST", 
url: "myURL.php", 
dataType: "json", 
data: {username: username, password: password}, 
success: function(results) { 
    alert('Hi '+results.name); 
} 
}); 

Details for dataType can be found here

另外,you can do this

$.getJSON("myURL.php", {username: username, password: password}, 
    function(results) { 
    alert('Hi '+results.name); 
}); 
+0

感谢您获取dataType的链接以及getJSON的相关信息。 – Matt 2010-04-27 03:29:11

1

我的猜测是,你期待JSON,但你得到的字符串。

1

您也需要在请求中指定数据类型,像这样:

$.ajax({ 
type: "POST", 
url: "myURL.php", 
data: {username: username, password: password}, 
dataType: "json", 
success: function(results) { 
    //THIS IS WHERE THE PROBLEM IS 
    alert('Hi '+results.name); //Should be "Hi Basil Fawlty" 
    } 
}); 

,或者你可以的,如果你使用jQuery < 1.4使用

header("Content-Type: application/json"); 
3

设置从PHP内容类型,你必须指定dataType: "json"

从1.4,dataType默认为:

智能猜测(XML,JSON,脚本 或HTML)

但这需要响应标头包含字符串 “JSON” 。所以你要发送:

header('Content-type: application/json');

用的dataType这新增加的灵活性允许处理器应对多种类型的返回。

如果问题仍然存在,您需要提醒整个回复alert(results);以查看实际返回的内容。

很多相似的答案在这里。不知道是谁开始的,但毫无疑问入侵波兰的人。

+0

感谢您的回答。如果我能参加波兰评论,我会投票两次。 – Matt 2010-04-27 03:29:52

+0

我想都是在同一时间创作的。 – Geoff 2010-04-27 21:46:29