2011-04-09 20 views
0

我想增加一個數字並更新數據庫,然後在不刷新頁面的情況下顯示數字。我只是想知道,有沒有辦法使用JavaScript讀取/更新MySQL?PHP,JavaScript和MySQL:更新和傳遞變量

我試着四處搜尋,似乎你必須調用另一個程序來改變你的值。現在我有

<?php 
require ("connect.php"); 

echo "connected!<br>"; 

$extract = mysql_query("SELECT * FROM articles")or die ("Not working"); 

//$numrows = mysql_num_row($extract); 

while ($row = mysql_fetch_assoc($extract)) { 

    $id = $row['id']; 
    $article = $row['article']; 
    $thumbsup= $row['thumbs_up']; 
    $thumbsdown = $row['thumbs_down']; 
    $date = $row['date_time']; 
    $username = $row['username']; 
    mysql_query("UPDATE articles SET thumbsup = 1"); 
} 
?> 

所以我想知道,一旦這個頁面更新數據庫,你如何獲得更新值的JavaScript函數?現在我只是從文件中讀取它

xmlhttp.open("GET", "http://localhost/ajax/folder5/includes/a.txt", true); 

非常感謝您的幫助!

回答

3

由於您已經有一個讀取數據的服務器端腳本,您只需將其作爲對您的XMLHttpRequest的響應返回並使用callback函數處理它。假設你想返回$id, $article, $thumbsup ..等等,你可以把它放在一個數組中並編碼,建議你可以使用json_encode()。在你的PHP腳本,你可以這樣做:

$Response = array(
    'Id' => $id, 
    'Article' => $article', 
    'ThumbsUp' => $thumbsup 
) 

echo json_encode($Response); 
exit; 

而且在你的JavaScript,你可能需要添加一個響應處理程序,如:

xmlHttp.onreadystatechange = function() { 

if (syndLinkRequest.readyState != 4) 
    return; 

    var result = xmlHttp.responseText; 

    /* if you've returned javascript instead of xml or text, 
    you can eval(result) to access the javascript variables returned. 
    */ 

    // do your thing 
    } 

職高,你需要改變你的請求數據的方式而不是使用GET到文本文件,在這種情況下,你可能想直接請求PHP腳本並返回結果:

xmlhttp.open("GET", "/ajax/update.php", true); // this will return the response 

從本質上講,這就是你所需要的。 有關更簡單的示例,請參閱here

另外檢查jQuery的ajax函數,因爲它可能會幫助你很多。

**編輯**

增加了額外的信息。 因爲我們返回的結果是JSON(通過使用json_encode),你需要添加頁眉內容類型,在你的腳本略低於<?php部分的頂部大部分補充一點:

header('Content-type: application/json'); 

而基於上述假設的例子中,我們有這樣的迴應:

$Response = array('Id' => $id, 'Article' => $article,'ThumbsUp' => $thumbsup); 
echo json_encode($Response); 
exit; 

一旦你收到這在callback功能,這將被轉換爲類似(樣本值):

{"Id":1,"Article":20,"ThumbsUp":30} 

這是考慮到結果變量:

var result = xmlHttp.responseText; 

要確保我們得到評估,我們將使用eval()到結果字符串,因此您可以通過訪問屬性獲取值關閉它的響應。一旦這樣做了,你可以從像result.ThumbsUp結果變量,讓你30基礎上,例如訪問屬性

var result = eval(xmlHttp.responseText); 

:取本爲例。然後,您可以將該值分配到任何需要的位置,例如:document.getElementById('c').innerHTML = result.ThumbsUp;我希望這能給您一個更清晰的想法。

使用說明eval(),閱讀this

+0

嗯,我試過你說的,我似乎沒有得到任何輸出 – Sivapriyan 2011-04-09 15:59:38

+0

嘿,我編輯了我的答案,添加了一些你可能想嘗試的新點 – tradyblix 2011-04-09 22:51:08

1

您在使用XMLHttpRequest的正確軌道上。基本上,你只需要製作一個你想要的輸出的腳本(而不是一個靜態的文本文件)。

您的PHP AJAX腳本輸出的一個不錯的選擇是JSON。您可以使用json_encode。還有其他的可能性,包括XML。

+0

那麼,我將如何精確地將值傳遞給javascript函數? – Sivapriyan 2011-04-09 04:49:31