处理多个ajax响应

时间:2017-06-26 11:14:22

标签: javascript php jquery mysql ajax

首先,我想描述一下我想做什么。

我有一张桌子,一列有按钮。每个按钮代表一个ID。单击按钮时,我将ID存储在javascript中的变量中。我想在MySQL语句中使用此ID来获取一些信息,这些信息位于多行中,并使用这些数据创建PDF文件。

我想使用ajax来处理已恢复的数据,但我不确切知道如何处理。

到现在为止,这就是我所得到的:

<script>
  $("#grid-table").bootgrid({        
      formatters: {
        "buttonID": function(column, row){
          return  "<button type=\"button\" id=\"edit\" class=\"btn btn-xs btn-default print-pdf\" +  data-row-id1=\"" + row.ID + "\" ><span class=\"fa fa-file-pdf-o\"></span></button> ";
        }
    }).on("click", function(e){                
      var id = $(this).data("row-id1");   // id is a string
      var recv_data1[];
      var recv_data2[];
      var recv_data3[];
      var recv_data4[];
      var i = 0;

      if(id != ""){
        xmlhttp = new XMLHttpRequest();

        xmlhttp.onreadystatechange = function(){
          if (this.readyState == 4 && this.status == 200) {
            // how to get all datas and store them here?
            // and get the count of $i

            var doc = new jsPDF();      // pdf object        
            mainPage(doc);              // my function to create a pdf background

            var xPos = 25;
            var yPos = 60;

            while(i){
              doc.setFontSize(12);
              doc.setFontType('normal');           
              doc.text(70, 55, recv_data1[i]);     // here I want to use some of the data

              doc.setFontSize(11);
              doc.setFontType('bold');
              doc.text(xPos+10,  yPos+10, recv_data2[i]);  // some more data I got from the mysql-statement
              doc.text(xPos+55,  yPos+10, recv_data3[i]);
              doc.text(xPos+80,  yPos+10, recv_data4[i]);

              i--;
            }

            doc.save(recv_data1 + '.pdf'); // save pdf file
          }
        };
        xmlhttp.open("GET","get_data.php?id="+ id, true);
        xmlhttp.send();
      }        
  });
</script>

PHP-Part from get_data.php:

<?php  
  include "dbconnect.php";      

  $revc_id = htmlspecialchars_decode($_GET['id']);

  $result = mysqli_query($db, "SELECT     *
                              FROM        table
                              WHERE       table.id = 'revc_id';");

  $i = 1;
  while($row = mysqli_fetch_array($result)) {
    // how to handle the fetched array and alle the data to 
    // more than one variable for the js like 
    // echo $row['name']    for recv_data1[]
    // echo $row['city']    for recv_data2[]
    // echo $row['street']  for recv_data3[]
    // echo $row['country'] for recv_data4[]
    // echo $i              to know how many datas are in there
    $i++;
  }

  mysqli_close($db);
?>            

这只是我想要做的一般情况,而不是原始代码。所以我想要的是,我从get_data.php中得到的反应,在大多数情况下是多行,都要保存到数组中。

我希望你知道我的意思,如果不是随意请问。

1 个答案:

答案 0 :(得分:1)

当显示的代码不是实际代码时,请回答Tricky,但一般情况下你可以尝试这样的事情。

php
---

$data=array();
while( $row = mysqli_fetch_object( $result ) ) {
    $data[]=array(
        'name'      =>  $row->name,
        'city'      =>  $row->city,
        'street'    =>  $row->street,
        'country'   =>  $row->country
    );
}
echo json_encode( $data );



/* javascript */

document.getElementById('BTTN_ID_ETC').onclick = function(e){
    e.preventDefault();

    var id = $( this ).data("row-id1");

    if( id != "" ){
      xmlhttp = new XMLHttpRequest();

      xmlhttp.onreadystatechange = function(){
        if( this.readyState == 4 && this.status == 200 ) {

            var json=JSON.parse( this.response );

            var doc = new jsPDF();
            mainPage( doc );
            var xPos = 25;
            var yPos = 60;

            for( var n in json ){
                try{
                    var obj=json[ n ];

                    if( typeof( obj )=='object' ){
                        var name=obj.hasOwnProperty('name') ? obj.name : false;
                        var city=obj.hasOwnProperty('city') ? obj.city : false;
                        var street=obj.hasOwnProperty('street') ? obj.street : false;
                        var country=obj.hasOwnProperty('country') ? obj.country : false;

                        if( name && city && street && country ){
                            doc.setFontSize(12);
                            doc.setFontType('normal');

                            doc.text(70, 55, name );

                            doc.setFontSize(11);
                            doc.setFontType('bold');                

                            doc.text(xPos+10,  yPos+10, city );
                            doc.text(xPos+55,  yPos+10, street );
                            doc.text(xPos+80,  yPos+10, country );
                        }
                    }
                } catch( err ){
                    console.log( err );
                    continue;
                }
            }

            doc.save( json[0].name + '.pdf');
        }
      };
      xmlhttp.open( 'GET', 'get_data.php?id='+ id, true );
      xmlhttp.send();
    }        
};