使用each()打印数组时出现jquery ajax()问题

时间:2014-04-11 13:03:07

标签: javascript php jquery ajax

在我的代码中,我返回一个包含7名学生记录的php数组。使用jquery ajax()我想在成功函数上打印这些记录。

数据库表学生

+---------------------------+
| name | fathername | Email |
+---------------------------+

submit.php

$query=mysql_query("SELECT * from Students LIMIT 0,6");

   $row= array();
   $row=mysql_fetch_array($query);
   return json_encode($row);

的index.php

<script>
    $(function(){
        $("#form1").submit(function(event){
            event.preventDefault();

            $.ajax({
                    url:'submit.php',
                    type:'GET',
                    data:$(this).serialize(),
                    success:function(result){
                $.each(result,function(){
                $('.StudentName').text(result["name"]);
                $('.FatherName').text(result["fathername"]);
                $('.Email').text(result["email"]);
                    });

                    }
            });
        });
    });
</script>

<div class="StudentName"></div>
<div class="FatherName"></div>
<div class="Email"></div>

修改 我试图从php中只返回1个结果,但它的工作原理就是。

echo json_encode(mysql_fetch_array($query));

当我返回所有6条记录时,jquery函数不会执行,即

while($result=mysql_fetch_array($query))
{
echo json_encode($result);
}

4 个答案:

答案 0 :(得分:2)

PHP数组和JS数组之间有区别,你不能简单地将PHP数组传递给你的javascript,所以你应该先json_encode将它发送给js。

这会将您的PHP数组转换为JSON数组,例如:

 array(3) {
  [0]=>
    string(3) "foo"
  [2]=>
   string(3) "baz"
  [3]=>
   string(5) "blong"
}

string(33) "{"0":"foo","2":"baz","3":"blong"}"

所以试试 -

return json_encode($row);

然后当您收到回复时,请使用parseJSON

result = jQuery.parseJSON(result);
$.each(result,function(){
   $('.StudentName').text(result.name);
   $('.FatherName').text(result.fathername);
   $('.Email').text(result.email);
});

修改

另一件事,而不是return json_encode($row);echo json_encode($row);

修改2

(发送所有6条记录)

$final = array();
while($result=mysql_fetch_array($query))
{
    array_push($final,$result);
}
echo $final;

答案 1 :(得分:1)

这可能会对你有帮助。

你的AJAX

        $("#form1").click( function(e){


            var Somename = { };

            $.each($('#form1').serializeArray(), function() {
                Somename [this.name] = this.value;
            });             

            e.preventDefault();
            $.ajax({
                type: "GET",
                url: "submit.php",
                data: { upddt_empID: upddt_empID, somevariable: "YES" },
                success: function(data) {
                    alert('Successfull');           
                }
            });

你的PHP

if(isset( $_REQUEST['somevariable'] ) )
{
   $selItem = YourFunctionName( $_REQUEST['Somename ']['here your textbox id'], $_REQUEST['Somename ']['here your textbox id'],'yourtablename');
}

您的查询

function YourFunctionName(tablename)
{
    $qry = "SELECT * FROM $tablename";

    $result = mysql_query($qry);

    return $result;
}

答案 2 :(得分:0)

function success(result){
    $.each(result,function(){
        $('.StudentName').text(result["name"]);

看起来有问题。似乎没有理由循环result,因为您将其所有内容分配给页面中的相同元素。

但是,假设result是一个对象数组(比如SQL查询通常会产生它),那么它应该是

function(result){
    $.each(result,function(obj) {
//    missing parameter!!! ^^^
        $('.StudentName').text(obj["name"]);
//           access that here: ^^^

还可以执行console.log(result)或只是浏览请求URL以检查PHP脚本是否产生预期的响应。

答案 3 :(得分:0)

以下是解析可能对您有帮助的JSON的示例 - http://jsfiddle.net/Su6QR/

考虑到这个例子,改变你的AJAX函数 -

$.ajax({
    url:'submit.php',
    type:'GET',
    data:$(this).serialize(),
    success:function(result){
        var members = $.parseJSON(result);
        $.each(members, function() {
            var newStudent = '<span>' + this['name'] + '</span>';
            var newFather = '<span>' + this['father'] + '</span>';
            var newEmail = '<span>' + this['email'] + '</span>';
            $('.StudentName').append(newStudent);
            $('.FatherName').append(newFather);
            $('.Email').append(newEmail);
        });
    }
});

这应返回所有数据并将它们放入您创建的div中。格式化不是你想要的,但你应该能够很容易地修复它。