簡體   English   中英

從js調用php(帶有ajax)

[英]calling php from js (w/ ajax)

我正在建立一個基本論壇,每個帖子都包含一些文本,名字和姓氏以及消息的撰寫日期。 我想不斷用AJAX更新開發板,並在編寫新消息時即時添加新消息。 我有一個文件getlatest.php?date=... ,它檢索從$_GET的日期直到NOW()所有消息。 它以對象數組形式返回數據。 最后,我對數據進行JSON編碼。 我從一些AJAX代碼中調用此函數,如下所示:


 setInterval("update()", 5000);
                function update(){
                    $.get("getlatest.php", {
                        date: "2009-06-23_16:22:12" //this is just a date I
                                                    //entered for testing
                    }, function(forumdata){
                                           //do something with forumdata here?
                    }, "json");
                }

現在,我已經將數據存儲在forumdata內,如forumdata[0].first_name

我現在想使用PHP來顯示注釋,如下所示:

$forumdata = json_decode(forumdata);
foreach ($forumdata as $value)
{
    $newpost = new Post($value); // Post being some class that gets the data from 
                                 // $value and converts it to HTML + CSS
    $newpost->displayPost();     // some function that echo's the HTML
}

我意識到我要在這里完成的工作有點不可行,因為PHP是一種服務器端語言,並且此時的計算是在客戶端進行的,但是有什么方法(也許是通過AJAX嗎?)可以使用PHP我通過javascript檢索數據后,如何管理數據?

我想要這樣做的主要原因是我對javascript完全缺乏知識,因此將forumdata變量轉換為HTML和CSS塊的任何替代方法對我來說也非常forumdata

避免服務器和客戶端之間日期/時間不匹配的方法是使每個條目都有唯一的ID。 這樣,您就可以提供特定記錄而不是相對時間來抵消。 MySQL中的主鍵就是一個例子。

您可以讓getlatest.php返回HTML代碼而不是JSON數據。 這樣,您只需要將返回的HTML代碼注入文檔中即可。

您應該更改getlatest.php(或創建一個新文件getlatesthtml.php),以便它返回displayPost()的HTML輸出。 然后“ //在這里使用forumdata做些什么?” 只需在某個地方設置某個容器的.innerHTML。

好吧,由於您不想使用太多的JavaScript(不要被流行的Libraries and Framework所嚇倒,因此,這是一件非常容易學習的事情,並且可以通過管理所有內容來節省很多麻煩服務器端),您仍然可以只輸出HTML,而無需將其解碼為JSON。 因此客戶端這樣做:

 setInterval("update()", 5000);
                function update(){
                    $.get("getlatest.php", {
                        date: "2009-06-23_16:22:12" //this is just a date I
                                                    //entered for testing
                    }, function(forumdata){
                                           //do something with forumdata here?
            // e.g.
            $("#forum_entries").prepend(forumdata);
                    }, "html");
                }

PHP腳本(getlatest.php)就是這樣做的:

<?php
$forumdata = find_posts_after_date($_GET('date'));
foreach ($forumdata as $newpost)
{
   // Echos just the post specific HTML not a whole HTML page
    $newpost->displayPost();     // some function that echo's the HTML  
}
?>

正如書呆子所建議的那樣,您不應使用“日期”,而應使用客戶端當前顯示的帖子的唯一文本ID。

我看到您已經接受了答案,但是您可能想考慮學習解析json。 有很多原因導致您希望讓javascript處理數據顯示。 考慮一下帶有api的所有Web服務,它們返回某種xml或json。 考慮到您現在在使用jquery的位置,它與學習'each()'一樣基本。 我做了一些谷歌搜索, 這個鏈接看起來會讓您入門。 如果您需要更多幫助,請發表評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM