使用AJAX将数据从PHP返回到JQuery的问题

时间:2014-04-14 14:32:03

标签: php jquery ajax json

我正在尝试使用Jquery,AJAX和PHP进行评论系统。 我能够将注释存储在数据库中,但是当我想从数据库中显示它们时,我遇到了问题。我相信在读取从.php文件以JSON格式发送的数据时,我做错了。

这是我正在使用的代码。

的index.html

<form id="form" method="post">
    Name: <input type="text" name="name" id="name">
    Comment: <textarea rows="5" cols="115" id="text"></textarea>
    <input type="submit" id="submit" value="submit">
</form>

events.js

$('#form').on("click",'#submit',function(){
    var name = $("#name").val();
    var text = $("#text").val();
    var dataString = 'name='+ name + '&text=' + text;

    $.ajax({
        url:'comments.php',
        type:'POST',
        cache: false,
        data: dataString,
        success: function(data){
            alert("success");  
            $(".comment-block").append(data);       
        },
        error:function(){
            alert("failure");
        }
    });

的comments.php

<?php

$name=$_POST['name'];
$text=$_POST['text'];

$conexion=mysql_connect("localhost","user","pass");
mysql_select_db("db_1",$conexion);

mysql_query("insert into comments (name,text) values ('$name','$text')");

$sql=mysql_query("SELECT * FROM comments");

$data=array();
$i=0;

while ($row=mysql_fetch_array($sql))
{ 
    $data[$i]["name"]=$row[name];
    $data[$i]["texr"]=$row[text];
    $i++;
}

echo json_encode($data)

?>

3 个答案:

答案 0 :(得分:1)

尝试更改

$data[$i]["name"]=$row[name];
$data[$i]["texr"]=$row[text];

$data[$i]["name"]=$row['name'];
$data[$i]["text"]=$row['text'];

并且如其他解决方案和jQuery API所述,将帖子数据作为对象传递得比正确格式化的字符串更好:

  

data类型:PlainObject或String要发送到服务器的数据。它是   转换为查询字符串,如果还不是字符串。它被附加到   GET请求的URL。请参阅processData选项以防止这种情况   自动处理。对象必须是键/值对。如果价值是   Array,jQuery使用相同的密钥序列化多个值   传统环境的价值(如下所述)。

另外,请使用PDOmysqli

另外,设置

contentType: "application/x-www-form-urlencoded;charset=UTF-8",
如果需要,

或$ .ajax参数上的正确字符集(并urldecode适当)。

并且不要忘记验证和清理您的数据(filter input可能是一个很好的起点)。

jQuery将执行智能猜测,因此没有必要设置dataType或json解码响应成功,如上所述,但为了清楚起见,您仍然可以这样做。再次从jQuery API开始:

  

dataType(默认值:Intelligent Guess(xml,json,script或html))

答案 1 :(得分:1)

使用object传递$ .ajax中的数据。

var dataString = {'name':name,'text':text};

同样使用mysqli_ *,因为mysql_ *已折旧。

答案 2 :(得分:0)

你应该尝试将event.js文件中的json编码数据处理为 -

success: function(data){
  var test = jQuery.parseJSON(data);
   var test1=test.data[0]['name'];
},