2012-01-09 58 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