2017-06-26 14 views
0

まずは何をしたいか説明したいと思います。複数のAjaxレスポンスを処理します

私はテーブルがあり、1つの列にはボタンがあります。各ボタンはIDを表します。ボタンをクリックすると、IDを変数にjavascriptで格納します。このIDをMySQL文で使用して、複数の行にある情報を取得し、これらのデータを含む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> 

get_data.phpから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から取得した応答を配列に保存することです。

あなたが私の言いたいことを知っていれば幸いです。

+0

あなたはそれが単なる一例です(「クリック」、機能(e)は{ ' –

+0

に' jqueryのに任意のセレクタを定義していませんでした。 私はそれを処理するためにbootgridを使用..私はこの例をチェックしてください – Alex

+0

私のポストを編集しましたこれはあなたを助けるかもしれません。https://www.phpflow.com/php/addedit-delete-record-using-bootgrid-php-mysql/ –

答えて

1

表示されているコードが実際のコードではない場合には戸惑いますが、一般的にこのようなことを試すことができます。

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(); 
    }   
}; 
+0

あなたのコードを編集していくつかのコメントを追加できればいいです:)高速回答ありがとうございます。私はそれを試してみます – Alex

+0

最後のインデックスの後にforループでエラーが発生します。 未知のエラー:テキストのタイプは文字列または配列でなければなりません。 "undefined"は認識されません。これはnの最後の値がこれであるからです: n = "first"、json =(2)[Object、Object] .....なぜか分かりますか? – Alex

関連する問題