jQuery $ .post没有返回JSON数据

时间:2012-04-10 03:13:59

标签: php json jquery

我已经阅读了多篇类似的帖子,我的代码似乎与建议相符,但仍然没有返回数据。

这是我的JS:

    $.post('php/get_last_word.php', { user_id : userID },
        function( data ) {
            currentLanguage = data.language_id;
            currentWord = data.word_id;
            console.log("currentLanguage = " + currentLanguage)
            console.log("currentWord = " + currentWord);        
    },'json');

相关的php:

$user_id=$_POST['user_id'];

mysql_select_db(wordsicle_search); 

$sql = "SELECT `language_id`, `word_id` FROM `save_state` WHERE `user_id`=$user_id";
$result = mysql_query($sql,$con);

while ($row = mysql_fetch_assoc($result)) {
    $encoded = json_encode($row);
    echo $encoded;
}

结果日志:

Connected successfully{"language_id":"1","word_id":"1"} 

因此json数组正在被回显,但它不会在data中结束,因为currentLanguagecurrentWord没有被填充。这是异步性问题吗?或其他什么?

2 个答案:

答案 0 :(得分:3)

确保您的PHP脚本中有一个有效的json返回到您的变量

如果您的json对象是这样的,

{"language_id":"1","word_id":"1"}

您可以像这样访问

currentLanguage = data.language_id;
currentWord = data.word_id;

示例JsFiddle http://jsfiddle.net/NuS7Z/8/

您可以使用http://jsonlint.com/来验证您的jSon是否格式正确。

在发布请求中指定json作为数据类型值将确保响应以json格式返回到成功回调。

$.post('php/get_last_word.php',{user_id:userID}, dataType:"json",function(data){
        currentLanguage = data.language_id;
        currentWord = data.word_id;
});

您还可以使用getJson来获取json数据。 getJson是ajax调用的简写,数据类型为json

http://api.jquery.com/jQuery.getJSON/

答案 1 :(得分:0)

尝试将您的JS更改为:

 $.getJSON('php/get_last_word.php', { user_id : userID },
        function( response ) {
            if (response.success) {
                currentLanguage = response.data.language_id;
                currentWord = response.data.word_id;
                console.log("currentLanguage = " + currentLanguage)
                console.log("currentWord = " + currentWord);     
            } else {
                alert('Fail');
            }   
    });

和你的PHP:

<?php
$success = false;
$data = null;
$user_id=$_POST['user_id'];

mysql_select_db(wordsicle_search); 

$sql = "SELECT `language_id`, `word_id` FROM `save_state` WHERE `user_id`=$user_id";
$result = mysql_query($sql,$con);

while ($row = mysql_fetch_assoc($result)) {
    $success = true;
    $data = $row;
}

// I generally format my JSON output array like so:

// Response
header('Content-Type: application/json');
echo json_encode(array(
    'success' => $success,
    'data' => $data
));

?>

这样它更有条理,不要忘记设置内容类型。

希望有所帮助。