AJAX响应,未定义(在控制台正常的JSON中)

时间:2015-10-05 20:06:04

标签: javascript php jquery json ajax

第一个

<form id="tweetInsert"  action="<? echo URL ?>homescreen/ajaxInsertTweet/" method="post">
    <textarea name="tweetText" rows="3" cols="40"></textarea>
    <button type="submit" name="submitTweet">Tweet</button>
</form>
<div class="row">
    <div id="tweets">
    </div>
</div>

第二个

function ajaxInsertTweet()
{
    $tweet = $_POST["tweetText"];
    $stmtInsertTweet = $this->db->prepare("INSERT INTO tweets (tweet) VALUES (:tweet)");
    $stmtInsertTweet->execute(array(':tweet' => $tweet));
    $data = array('tweet' => $tweet );
    //print_r($data);
    echo json_encode($data);
    exit;
    //header("Location:".URL."homescreen");
}

第三个

$("#tweetInsert").submit(function(ev){

    ev.preventDefault();
    var url = $(this).attr("action");

    var data = $(this).serialize();

    console.log("Output: " + data);

    $.post(url, data, function (o){
        $("#tweets").append("<div>"+o.tweet+"</div>");
    });
});

我尝试在div内部立即加载帖子而不刷新页面,所以我在我的javascript上加载一个函数来执行帖子并停止提交表单。我有一个json数组 - &gt;在我的控制台中,有一个json数组,如:{"tweet","HERE IS THE POST OR SOMETHING ESLE"} 但是在div中它被称为undefined。 在我的console.log("Output: "+data)中,我得到了类似的内容:

  

输出:tweetText = fgsdgfh

     

问题:为什么我的div里面有一个未定义的?它应该显示推文

3 个答案:

答案 0 :(得分:1)

尝试将dataType参数添加到$.post

您似乎没有在服务器上设置Content Type标头,因此可能会将响应解释为文本。

这会告诉$.post期待json并在内部解析

$.post(url, data, function (o){
    $("#tweets").append("<div>"+o.tweet+"</div>");
},'json');

答案 1 :(得分:0)

改变这个:

$.post(url, data, function (o){
  $("#tweets").append("<div>"+o.tweet+"</div>");
});

为:

$.post(url, data, function (o){
  $("#tweets").append("<div>"+o.tweetText+"</div>");
});

答案 2 :(得分:0)

$.post(url, data, function (o){
    $("#tweets").append("<div>"+o.tweet+"</div>");
});

该函数的输入参数是从页面返回的内容。所以o是你返回的HTML。它是一个字符串,而不是一个对象。

所以正确的格式是

$.post(url, data, function (o){
    $("#tweets").append("<div>"+ o +"</div>");
});