2011-06-08 53 views
1

我對jQuery(通過jQuery)和JavaScript非常陌生。我想要的是定期(並且異步)執行一個PHP腳本來獲取一些SQL數據。不過,我會將這些數據呈現在JavaScript圖表中,所以我需要它回到我的JavaScript中。在jQuery ajax調用之後將SQL數據重新獲取到JavaScript中

我嘗試了JavaScript內部的一個嵌入式php腳本,它將SQL數據推入數組,然後簡單地使用.ajax調用來獲取頁面本身,但這並不起作用(儘管我可以在頁面源中看到JavaScript的改變,圖表沒有迴應更改):

ajax.php(不工作):

$(function() {   
    function fetchData() {    
    $.ajax('ajax.php'); 
    <?php   
    try 
    { 
     $now = time(); 
     $query = "select * from jet_pressure;"   
     $result = $db->query($query); 
     foreach ($result as $row) 
     {          
     print "d1.push([".$row['timestamp'].",".$row['unknown']."]);";    
     }         
    } 
    catch (Exception $e) 
    { 
     print 'Exception : '.$e->getMessage(); 
    } 
    ?>   
    $.plot($("#placeholder"), [ d1]); 
    setTimeout(fetchData, 5000); 
    }  
    setTimeout(fetchData, 500);  
    });  

什麼是推薦的方式做到這一點?

+0

並不清楚自己在做什麼,如果你想更新使用AJAX則該行應在取得成功的佔位符的內容:你的Ajax調用的方法。我建議你在jquery.com上閱讀ajax文檔 – 2011-06-08 09:41:52

+0

你正在將服務器端PHP與客戶端腳本混合在一起。 ajax.php是可以運行的 - 腳本中間的php只在第一次加載頁面之前執行 – mplungjan 2011-06-08 09:43:13

回答

3

我認爲你在混淆你的概念。 PHP只能在Web服務器上運行。客戶端的JavaScript。如果您創建一個網頁與.php擴展爲您ajax.php運行(即Web瀏覽器)

,它會從你的網絡服務器一次,一切送達它包含的是一個在<?php ?>塊會由服務器解析 - 它不是動態的。

生成的頁面包含來自您的PHP腳本的解析值,但不包含腳本本身。

Javascript在用戶計算機上運行,​​因此處理用戶交互和網頁上的事件。當您需要從服務器獲取數據時,您可以使用Javascript調用服務器腳本(本例中爲php)。這基本上就是AJAX的全部內容。但通常情況下,javascript包含在結尾爲.js的文件中,除非JavaScript實際上包含在您的網頁中,否則這些文件不會被您的網絡服務器解析,除非這些日子實際上不怎麼做。

我不知道你是通過混合使用JavaScript與PHP做的。這不是AJAX。

我建議你使用類似JSON的東西。這粗略的PHP腳本首先將你的結果編譯成JSON,然後是javascript ajax調用。您需要包含JQUERY庫,並將整個php腳本另存爲一個名爲getdata.php的獨立文件。

<?php 
// You'll have to do all the database select stuff here 


    while ($Row = mysql_fetch_array($params)) 
{  
    $jsondata[]= array('jsobjectfield1'=>$Row["dbtablefield1"], 
     'jsobjectfield2'=>$Row["dbtablefield2"],      'jsobjectfield3'=>$Row["dbtablefield3"],      'jsobjectfield4'=>$Row["dbtablefield4"]); 
}; 
echo("{\"TableData\": ".json_encode($jsondata)."};"); 

?> 

的Javascript:

$.ajax({ 
    url: 'getdata.php', 
    type: "POST", 
    data: entereddata, 
    dataType: "json", 
    timeout: (7000), 
    //wait 7 seconds   
    error: function(data)   
    {      

    }, //end of ERROR handling   
    success: function(data)   
    { 
     // you'll find the data returned here: 
    data.jsobjectfield1 
    }; // end of SUCCESS handling 

}); // end AJAXcall 
+0

謝謝,這個工程。但我認爲我所做的應該產生類似的東西,因爲我不同步地更新頁面本身(ajax.php),因此服務器應該重新生成php頁面,從而用新數據填充它。這也是我在查看頁面源代碼時看到的。那麼,但沒有工作,所以現在不重要。 – Rolle 2011-06-08 11:02:07

0

嗨我不認爲你可以直接做....如果你想在PHP和JS之間來回傳遞數據你需要使用xml http請求..你可以找到一個很好的教程,將幫助你這裏有很多...... http://www.tizag.com/ajaxTutorial/ajaxxmlhttprequest.php 希望有幫助......當我開始的時候,它確實幫了我......我試圖做同樣的事情,你正在嘗試做,然後我知道我是試圖混淆了服務器和客戶端腳本

你在這裏做什麼是以下....

1傳的參數列表到PHP

2 PHP做一些處理(在你的情況下查詢數據庫),並回所需的輸出變量

3所如果你正在尋找直接的代碼...你去那裏回到JS

....信貸去我上面提到它的網站不是我的代碼...我真的建議你去那個網站...你會在很短的時間內學到很多......希望可以幫助

<html> 
<body> 

<script language="javascript" type="text/javascript"> 
<!-- 
//Browser Support Code 
function ajaxFunction(){ 
    var ajaxRequest; // The variable that makes Ajax possible! 

    try{ 
     // Opera 8.0+, Firefox, Safari 
     ajaxRequest = new XMLHttpRequest(); 
    } catch (e){ 
     // Internet Explorer Browsers 
     try{ 
      ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP"); 
     } catch (e) { 
      try{ 
       ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
      } catch (e){ 
       // Something went wrong 
       alert("Your browser broke!"); 
       return false; 
      } 
     } 
    } 
    // Create a function that will receive data sent from the server 
    ajaxRequest.onreadystatechange = function(){ 
     if(ajaxRequest.readyState == 4){ 
      document.myForm.time.value = ajaxRequest.responseText; 
     } 
    } 
    ajaxRequest.open("GET", "serverTime.php", true); 
    ajaxRequest.send(null); 
} 

//--> 
</script> 



<form name='myForm'> 
Name: <input type='text' onChange="ajaxFunction();" name='username' /> <br /> 
Time: <input type='text' name='time' /> 
</form> 
</body> 
</html> 

serverTime.php

<?php 
echo date("H:i:s"); 
?> 
+1

我同意。我忘了這個網站,技術解釋得非常好,雖然現在當然像JQuery這樣的東西讓生活更輕鬆 - 但只有當你瞭解本網站描述的基本概念。 – T9b 2011-06-08 10:27:40

+0

@ T9b謝謝你+1人的回答 – koool 2011-06-08 10:39:27

相關問題