2012-01-09 31 views
0

我已經創建了一個頁面「index.php」與很多divs,我只需要刷新表單提交時只有一個divs。從提交表格加載php的動態內容

這個div加載從chat_window.php這是如下內容:

<div id="chatbox"> 
    <?php echo $res; ?> 
</div> 

<!-- Chat user input form--> 
<?php echo $formchat; ?> 

chat_window.php使用動態內容 - $res$formchat從chat.php。 每次我發佈表單時,$ res和$ formchat的內容都會被修改,我需要在加載chat_window.php的頁面中反映相同的內容。

我使用AJAX和jQuery做同樣如下:

$(document).ready(function() { 
    $("#submit").click(function() { 
     var name = $("input#chat").val(); 
     var dataString = "chat="+ name; 

     $.ajax({ 
      type: "POST", 
      url: "programo/bot/chat.php", 
      data: dataString, 
      success: function() { 
      } 
     }); 

     $("#chatwrapper").load(chat_window.php); 

     return false; 
    }); 
}); 

的index.php文件有一個div來顯示chat_window如下:

<!-- Chat window--> 
<div id="chatwrapper"> 
    <?php include ("chat_window.php"); ?> 
</div> 

按我的分析,當我發佈表單,$ res和$ formchat在php中得到更新。但是當我加載chat_window.php時,它不會加載修改後的值。它相當於加載了初始靜態值。 (請不要建議setInterval(),因爲我不想自動刷新頁面)。

回答

0

我完成了我的工作。雖然我用另一種方式來做。

我在R & D的幾天之後就已經理解了,當我們將表單提交給php時,請求將與輸入參數一起發送。當你的php文件處理這個請求時,它可能會更新一些全局變量。它完成處理請求並將控制權返回給調用index.php頁面。

需要注意的重要事項是: 處理表單提交請求時所做的變量更新在返回控件後不會保留。全局php變量只會在頁面刷新時纔會更新。

所以,如果有一個嚴格的要求來避免頁面刷新,從一些輸出字符串中收集來自php的處理數據並將其傳遞迴索引。這樣的php:

$responseString = $res . "|" . $formchat; 
echo $responseString; 

.ajax的成功參數將收到此輸出,因此,您可以更新您的聊天窗口或任何其他形式。

0

Javascript是非阻塞的,所以它意味着解釋器在處理下一個之前不會等待作業完成。

在你的代碼中,$("#chatwrapper").load('chat_window.php');在它完成之前的ajax請求之前被調用。您將需要使用ajax成功事件來調用重新加載。

嘗試:

$.ajax({ 
    type: "POST", 
    url: "programo/bot/chat.php", 
    data: dataString, 
    success: function() { 
    $("#chatwrapper").load('chat_window.php'); 
    } 
}); 
+0

感謝您的回覆。我甚至嘗試了以上。不幸的是,它不工作。 :( – 2012-01-10 05:56:17

+0

是否有任何Javascript錯誤出現?嘗試使用Firebug來查看來自ajax調用的響應 – SeanNieuwoudt 2012-01-10 11:28:40

0

嘗試移動​​語句轉換成AJAX成功處理程序:

$.ajax({ 
    type: "POST", 
    url: "programo/bot/chat.php", 
    data: dataString, 
    success: function() { 
     $("#chatwrapper").load("chat_window.php"); 
    } 

}); 

$.ajax()調用是異步,這意味着執行不會暫停等待響應,而是直接轉到​​呼叫。 (這也是異步的,所以你真的不能保證每次通話的響應都會進來,除非你在第一次通話結束前不進行第二次通話。)

+0

也嘗試了這一點。但它不起作用,我的朋友.. – 2012-01-10 05:56:44

+0

它應該工作(除了缺少引號我剛剛補充說,你的問題中也沒有)你確定它重新加載初始值,而沒有做任何事嗎? – nnnnnn 2012-01-10 06:18:44

+0

我在添加引號後檢查了它,但沒有成功,雖然請求正在處理中我使用提醒進行檢查),但「chat_window.php」沒有獲得$ res的刷新值。 – 2012-01-10 11:52:17