代码之家  ›  专栏  ›  技术社区  ›  Devner

jquery-需要访问成功执行Ajax post操作后接收到的PHP数组值

  •  1
  • Devner  · 技术社区  · 15 年前

    平台:

    jquery、php、mysql

    我所拥有的:

    我正在使用jquery处理表单中的信息,并将所有发布数据发送到一个PHP文件,该文件执行若干操作,并返回一个数据数组以及其他必要的数据。其中一个数组是数组的数组。我需要以这样的方式访问这个数组值,我可以将这些嵌套的数组值中的每一个附加到一个表中。

    我需要什么:

    我一直在和jquery代码作斗争,以使它能够工作很长时间,但它不能工作。所以如果有人能帮我 jQuery代码 我真的很感激。事先谢谢。

    表结构

    fname   lname    city
    Ed        Al      SA
    Bob       B       MN
    Chris     V       KJ
    

    PHP代码

    //Content of my PHP file that return json encoded data
    $success = 1;
    
    $new_rows_data['fname'] = array();
    $new_rows_data['lname'] = array();
    $new_rows_data['city'] = array();
    
    $result = mysql_query("SELECT fname, lname, city FROM table LIMIT 3");
    while( $row = mysql_fetch_array($result) ) 
    {
        $new_rows_data['fname'][] = $row['fname'];
        $new_rows_data['lname'][] = $row['lname'];
        $new_rows_data['city'][]  = $row['city']
    }
    
    print json_encode(array('success' => $success, 'new_rows_data' => $new_rows_data)); 
    

    jQuery代码:

    $('#button_delete').click(function() {  
    
      $.ajax({
       type: 'POST',  
       cache: false,
       url: 'test.php',
       data: $('#form1').serialize(), 
       dataType: 'json',
       success: function(data) {            
    
          if(data.success == '1')
          {
                 jQuery.each(data.new_rows_data, function(i, val) 
                {
                     $('#table').append('<tr>'+
    
                              '<td>'+val.fname+'</td>'+           
                              '<td>'+val.lname+'</td>'+           
                              '<td>'+val.city+'</td>'+           
    
                      '</tr>');   
    
                });
          }//END if
         }       
       }) //END ajax
    
      return false;
    });
    

    我正在尝试获取这些新数据,以便将其附加到具有id表的现有表中,以便如下所示 期望输出 :

    First Name   Last Name  City
      Orko           C      OI    ---> (Existing row of data)
      Gordon        Flash   KS    ---> (Existing row of data)
      Ed             Al      SA    ---> New row of data that just got appended
      Bob            B       MN    ---> New row of data that just got appended
     Chris           V       KJ    ---> New row of data that just got appended 
    
    3 回复  |  直到 13 年前
        1
  •  1
  •   munch    15 年前

    当我开始组合文本和其中的对象时,append对我来说从来都不是很友好。试试这个:

    $.each(data.new_rows_data, function(i, val) {
       var tr = $('<tr></tr>');
    
       $.each(val, function(i, newVal){
          var td = $('<td></td>').text(newVal);
          tr.append(td);
       });
    
       $('#table').append(tr);
    });
    

    应该完成工作。

    要更改为具有3列的多行,请执行以下操作:

    最好将PHP数组内部版本更改为:

    $result = mysql_query("SELECT fname, lname, city FROM table LIMIT 3");
    $i = 0;
    while( $row = mysql_fetch_array($result) ) 
    {
        $new_rows_data[$i]['fname'] = $row['fname'];
        $new_rows_data[$i]['lname'] = $row['lname'];
        $new_rows_data[$i]['city']  = $row['city'];
        $i++;
    }
    
        2
  •  1
  •   Skyborne    13 年前

    我刚在一次搜索中遇到这个问题,想指出,您的代码在哪里:

    $new_rows_data['fname'][] = $row['fname'];
    $new_rows_data['lname'][] = $row['lname'];
    $new_rows_data['city'][]  = $row['city'];
    

    这里发生的是你正在建立几个平行的阵列。在javascript中,单个值将可见,例如 data.new_rows_data.fname[0] 第一行的fname。当你这样做的时候 $.each(...) 在此基础上,您的函数应该看到i==“fname”和val的参数,这些参数等于3元素的名字数组。

    Munch的答案通过一个明确的索引完成了同样的事情,但是对于您的具体情况,我想编写如下代码:

    $new_rows_data[] = $row;
    

    或者对于计算值不那么简单的情况:

    $new_rows_data[] = array(
        'foo' => get_foo($row),
        'bar' => $row['bar']
    );
    

    在这两种情况下,新的\u行\数据会变成一个对象数组,其属性与您的PHP数组键匹配,在javascript中可以访问这些对象 data.new_rows_data[1].fname . 你的 美元,每个(…) 现在,循环会将i视为整数,将val视为具有所需属性的对象。

        3
  •  0
  •   Corey Ballou    15 年前

    我看到的第一期是松散的打字:

    if(data.success === 1)
    

    应该是

    if(data.success == '1')
    

    因为就JavaScript而言,从Ajax返回的所有数据都是一个字符串。我刚从@jammus注意到,您的PHP代码也应该 $success 变量的值为 0 1 .