2012-02-10 14 views
1

次のモードで作成されたjsonデータを返すajaxクエリからデータを追加しようとしています: $ lastedited = $ _GET ['lastload'];jQuery ajaxから新しい行としてテーブルにjsonデータを挿入する

$count = 1; 
$JsonArray = Array(); 


while ($count <= 4) { // luupataan x määrä ellei vastauksia tule. 

$result = mysql_query("SELECT  RFQs.DateAdded as DateAdded, 
           Customers.Name as customer, 
           RFQs.ID as RFQID, 
           Suppliers.Name as supplier, 
           Ships.Name as ship, 
           RFQs.CustomerRef as CustomerRef, 
           Contacts.FirstName as contactF, 
           Contacts.LastName as contactL, 
           Contacts.Email as contactE, 
           Users.tunnus as handler, 
           RFQStatus.Name as status, 
           RFQs.Description 
        FROM  RFQs 
        LEFT JOIN Ships ON RFQs.ShipID=Ships.ID 
        LEFT JOIN Contacts ON RFQs.ContactID=Contacts.ID 
        LEFT JOIN Customers ON RFQs.CustomerID=Customers.idCustomers 
        LEFT JOIN Users ON RFQs.PriJobHandler=Users.id 
        LEFT JOIN Suppliers ON RFQs.SupplierID=Suppliers.ID 
        LEFT JOIN RFQStatus ON RFQs.StatusID=RFQStatus.ID 
        WHERE  RFQs.LastEdited > '$lastedited' 
        ") or die(mysql_error()); 

if (mysql_num_rows($result) == 0) { 
    $count++; 
    sleep(5); // ei uusia rivejä, nukutaan 5 sekuntia ja yritetään uudelleen. 
}else { 
// käy rivit läpi ja pistää arrayyn 
    for ($x = 0, $numrows = mysql_num_rows($result); $x < $numrows; $x++) { 
    $row = mysql_fetch_assoc($result); 

    array_push($JsonArray, array("rivi" => array("ID" => $row["RFQID"], 
             "DateAdded" => $row["DateAdded"], 
             "Supplier" => $row["supplier"], 
             "Customer" => $row["customer"], 
             "Ship" => $row["ship"], 
             "CustomerRef" => $row["CustomerRef"], 
             "Contact" => $row["contactF"]." ".$row["ContactL"], 
             "Description" => $row["Description"], 
             "PIC" => $row["handler"], 
             "Status" => $row["status"]))); 
} 
$count = 6; 
} 

} 
if ($count == 5) { 
    echo "NO RESULTS!!"; 
} 
else if ($count == 6) { 
    //echo JSON to page 
    echo json_encode($JsonArray); 
} 

私のjQueryのはこのように書き:

<script type="text/javascript" charset="utf-8"> 

function waitForMsg(lastload){ 
    if (lastload==null){ 
     lastload = { "lastload": "<?php echo $lastload; ?>" }; 
    } 
    $.ajax({ 
     type: "GET", 
     url: "GetUpdates.php", 
     datatype: "json", 
     data: lastload, 
     async: true, /* If set to non-async, browser shows page as "Loading.."*/ 
     cache: false, 
     timeout:50000, /* Timeout in ms */ 

     success: function(data){ /* kun tulokset saadaan niin suoritetaan.. */ 
      if (data=="NO RESULTS!!") { 
      setTimeout(
       'waitForMsg()', 
       1000 
      ); 
      } else { 
       displayrow(data.rivi); 
      } 
     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown){ 
      addmsg("error", textStatus + " (" + errorThrown + ")"); 
      setTimeout(
       'waitForMsg()', /* Try again after.. */ 
       "15000"); /* milliseconds (15seconds) */ 
     }, 
    }); 
}; 

$(document).ready(function(){ 
    waitForMsg(); /* Start the inital request */ 
}); 

function displayrow(item) 
{ 
    var tblRow = 
      '<td id="showbutton-'+item.ID+'"><a href="#" onclick="hideShow(rowID'+item.ID+'">+</a></td>' 
    +'<td id="DateAdded-'+item.ID+'">'+item.DateAdded+'</td>' 
    +'<td id="Supplier-'+item.ID+'">'+item.Supplier+'</td>' 
    +'<td id="Customer-'+item.ID+'">'+item.Customer+'</td>' 
    +'<td id="Ship-'+item.ID+'">'+item.Ship+'</td>' 
    +'<td id="CustomerRef-'+item.ID+'">'+item.CustomerRef+'</td>' 
    +'<td id="Contact-'+item.ID+'">'+item.Contact+'</td>' 
    +'<td id="Description-'+item.ID+'">'+item.Description+'</td>' 
    +'<td id="PIC-'+item.ID+'">'+item.PIC+'</td>' 
    +'<td id="Status-'+item.ID+'">'+item.Status+'</td>' 
    +'<td id="Actions-'+item.ID+'">Hit F5 for actions</td>'; 
    $('#newRFQrowInput').before(tblRow); 
} 
</script> 

問題は、私は、私はアヤックスクエリから戻ってくるこのデータをどのように処理すべきかわからないです。 現時点で私が得意とするのは未定義です。

いくつかお手伝いできますか?

ありがとうございます!あなたはそれを返す前に

json_encode($JsonArray); 

+0

あなたはJavaScriptに戻ってそれを渡す前に、JSONとしてエンコードする必要があります。 – hakre

答えて

2

が情報を送り返すあなたの.phpファイルに変更を加えるだけの論理である

$JsonArray = array("ID" => $row["RFQID"], 
        "DateAdded" => $row["DateAdded"], 
        "Supplier" => $row["supplier"], 
        "Customer" => $row["customer"], 
        "Ship" => $row["ship"], 
        "CustomerRef" => $row["CustomerRef"], 
        "Contact" => $row["contactF"]." ".$row["ContactL"], 
        "Description" => $row["Description"], 
        "PIC" => $row["handler"], 
        "Status" => $row["status"] 
      ); 
echo json_encode(array('rivi'=>$JsonArray)); 

UPDATE:

はで変更を加えるあなたの

"Forループ"
$JsonArray = array(); 
for ($x = 0, $numrows = mysql_num_rows($result); $x < $numrows; $x++) { 
    while($row = mysql_fetch_assoc($result)){ 
     array_push($JsonArray,array("ID" => $row["RFQID"], 
            "DateAdded" => $row["DateAdded"], 
            "Supplier" => $row["supplier"], 
            "Customer" => $row["customer"], 
            "Ship" => $row["ship"], 
            "CustomerRef" => $row["CustomerRef"], 
            "Contact" => $row["contactF"]." ".$row["ContactL"], 
            "Description" => $row["Description"], 
            "PIC" => $row["handler"], 
            "Status" => $row["status"] 
            ) 
       ); 
    } 

} 

これをあなたと交換してください

else if ($count == 6) { 
    //echo JSON to page 
    echo json_encode(array("rivi" =>$JsonArray)); 
} 

とajax成功機能にも。

あなたdisplayrow関数の最後で、その後
success:function(data){ 
    if(data.rivi.length){ 
     //alert(data.rivi.length); 
     displayrow(data.rivi); 
    }    
} 

function displayrow($item){ 
    var tblRow = '<table>'; 
    $.each($item,function(index,value){ 
     tblRow +='<tr><td id="showbutton-'+value.ID+'"><a href="#" onclick="hideShow(rowID'+value.ID+'">+</a></td>' 
       +'<td id="DateAdded-'+value.ID+'">'+value.DateAdded+'</td>' 
       +'<td id="Supplier-'+value.ID+'">'+value.Supplier+'</td>' 
       +'<td id="Customer-'+value.ID+'">'+value.Customer+'</td>' 
       +'<td id="Ship-'+value.ID+'">'+value.Ship+'</td>' 
       +'<td id="CustomerRef-'+value.ID+'">'+value.CustomerRef+'</td>' 
       +'<td id="Contact-'+value.ID+'">'+value.Contact+'</td>' 
       +'<td id="Description-'+value.ID+'">'+value.Description+'</td>' 
       +'<td id="PIC-'+value.ID+'">'+value.PIC+'</td>' 
       +'<td id="Status-'+value.ID+'">'+value.Status+'</td>' 
       +'<td id="Actions-'+value.ID+'">Hit F5 for actions</td></tr>'; 
    } 
    tblRow = '</table>'; 
    $('#newRFQrowInput').before(tblRow); 
} 
+0

しかし、私のクエリは複数の行を返しますか? – Santtu

+0

多次元配列を作成して$ jsonArrayに代入するだけです。最後の行を変更する必要はありません。しかし、複数の行を取っている場合は、適切に配列を反復するために、displayrow関数を変更する必要があります。今は一次元配列しか扱えません。 –

+0

OK ..多次元を扱えるように修正するにはどうしたらいいですか? BTW。次のように – Santtu

0

をやっていますか?ページの終わり

echo $JsonArray 
+0

はい、echo json_encode($ JsonArray)です。 – Santtu

1

書き込みecho json_encode($JsonArray);GetUpdates.php

あなたは、私がこのように来て、使用に$.getJSON

あなたのデータを使用することをお勧めしますメソッドをGET を使用している場合、

[{rivi:{ID:23, DateAdded:2012-02-10,...}}]

ですから、例fまたはあなたが、残りは

var jsonData = [{rivi:{ID:'23', DateAdded:'2012-02-10'}}]; 
alert(jsonData[0].rivi.ID); // will return 23 
+0

私はecho json_encode($ JsonArray)を使用しました。除外して申し訳ありません。 – Santtu

+0

$ .getJSONは私が使っているものとどれくらい違いますか? ありがとう! – Santtu

+0

その簡単な、あなたは 'dataType'と' Type'を設定する必要はありません – diEcho

関連する問題