- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个元素(评论列表和表单)在我的应用程序的许多地方使用。除了需要刷新整个页面外,它工作得很好而且花花公子。这可能会有问题,尤其是当它重置您的评论所属的游戏时,会导致所有进度悲惨地丢失。我对 AJAX 的经验非常有限,那么用添加的评论重新加载元素的最有效、最简单的方法是什么?
这是我的元素:
<?php
/*
set variables:
$data : data of the parent
$type : the type of the parent
$name : (optional)unique name to avoid naming conflicts
*/
if(!isset($name)) {
$name = 0;
}
foreach($data['Comment'] as $comment){
echo '<div class="comment">'.$comment['content'].
' - '.$this->Html->link($comment['User']['username'],array('controller'=>'users','action'=>'view',$comment['User']['id']))
.'</div>';
}
echo $this->Form->create(null, array('url' => '/comments/add','id'=>'qCommentForm'));
echo $this->Html->link('Leave comment','javascript:toggleDisplay("comment'.$name.'")');
echo '<br><div id="comment'.$name.'" style="display:none;">';
echo $this->Form->input('Comment.parent_id', array('type'=>'hidden','value'=>$data[$type]['id']));
echo $this->Form->input('Comment.parent_type', array('type'=>'hidden','value'=>$type));
echo $this->Form->textarea('Comment.content',array('div'=>'false','class'=>'small','label'=>false));
echo $this->Form->submit(__('Leave comment'),array('div'=>'false','class'=>'small'));
echo '</div>';
echo $this->Form->end();
?>
好的,感谢您的帖子,我对 ajax 有了更多的了解,但我仍然不明白如何以“蛋糕方式”做到这一点。
最佳答案
像这样的 HTML:
<div id="comments">
<!-- list of comments here -->
</div>
<form method="post" action="/comments/add" id="qCommentForm">
<textarea name="Comment.content"></textarea>
<input type="submit" value="Leave comment">
</form>
您可以使用 JavaScript(在本例中为 jQuery)拦截提交事件并使用 Ajax 发送评论数据(假设 PHP 表单处理程序返回新评论的 HTML 片段):
// run on document ready
$(function () {
// find the comment form and add a submit event handler
$('#qCommentForm').submit(function (e) {
var form = $(this);
// stop the browser from submitting the form
e.preventDefault();
// you can show a "Submitting..." message / loading "spinner" graphic, etc. here
// do an Ajax POST
$.post(form.prop('action'), form.serialize(), function (data) {
// append the HTML fragment returned by the PHP form handler to the comments element
$('#comments').append(data);
});
});
});
如果 PHP 表单处理程序返回整个注释列表(作为 HTML)而不仅仅是新的,您可以使用 .html()
而不是 .append()
:
$('#comments').html(data);
您可以在 http://docs.jquery.com/ 找到 jQuery 文档.
更新:我不是 CakePHP 专家,但“蛋糕方式”AFAICT:
下载您喜欢的 JavaScript 库
在您的 View /布局中包含库,例如
echo $this->Html->script('jquery');
在您的 View /布局中编写 JsHelper 缓冲区,例如
echo $this->Js->writeBuffer();
在您的 Controller 中包含 JsHelper,例如
public $helpers = array('Js' => array('Jquery'));
使用 JsHelper::submit()
代替 FormHelper::submit()
生成一个提交按钮,该按钮将执行 Ajax 表单提交,例如
echo $this->Js->submit('Leave comment', array('update' => '#comments'));
在您的 Controller 中,检测请求是否为 Ajax 请求,如果是,则使用 Ajax 布局进行呈现,例如
if ($this->request->is('ajax')) {
$this->render('comments', 'ajax');
}
不确定是否/如何 RequestHandlerComponent
虽然这个数字。
关于php - 发送表单后如何在不刷新页面的情况下重新加载元素的内容(蛋糕方式)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10762583/
我是 Java 新手,这是我的代码, if( a.name == b.name && a.displayname == b.displayname && a.linknam
在下面的场景中,我有一个 bool 值。根据结果,我调用完全相同的函数,唯一的区别是参数的数量。 var myBoolean = ... if (myBoolean) { retrieve
我是一名研究 C++ 的 C 开发人员: 我是否正确理解如果我抛出异常然后堆栈将展开直到找到第一个异常处理程序?是否可以在不展开的情况下在任何 throw 上打开调试器(即不离开声明它的范围或任何更高
在修复庞大代码库中的错误时,我观察到一个奇怪的情况,其中引用的动态类型从原始 Derived 类型更改为 Base 类型!我提供了最少的代码来解释问题: struct Base { // some
我正在尝试用 C# 扩展给定的代码,但由于缺乏编程经验,我有点陷入困境。 使用 Visual Studio 社区,我尝试通过控制台读出 CPU 核心温度。该代码使用开关/外壳来查找传感器的特定名称(即
这可能是一个哲学问题。 假设您正在向页面发出 AJAX 请求(这是使用 Prototype): new Ajax.Request('target.asp', { method:"post", pa
我有以下 HTML 代码,我无法在所有浏览器中正常工作: 我试图在移动到
我对 Swift 很陌生。我如何从 addPin 函数中检索注释并能够在我的 addLocation 操作 (buttonPressed) 中使用它。我正在尝试使用压力触摸在 map 上添加图钉,在两
我设置了一个详细 View ,我是否有几个 Nib 文件根据在 Root View Controller 的表中选择的项目来加载。 我发现,对于 Nibs 的类,永远不会调用 viewDidUnloa
我需要动态访问 json 文件并使用以下代码。在本例中,“bpicsel”和“temp”是变量。最终结果类似于“data[0].extit1” var title="data["+bpicsel+"]
我需要使用第三方 WCF 服务。我已经在我的证书存储中配置了所需的证书,但是在调用 WCF 服务时出现以下异常。 向 https://XXXX.com/AHSharedServices/Custome
在几个 SO 答案(1、2)中,建议如果存在冲突则不应触发 INSERT 触发器,ON CONFLICT DO NOTHING 在触发语句中。也许我理解错了,但在我的实验中似乎并非如此。 这是我的 S
如果进行修改,则会给出org.hibernate.NonUniqueObjectException。在我的 BidderBO 类(class)中 @Override @Transactional(pr
我使用 indexOf() 方法来精细地查找数组中的对象。 直到此刻我查了一些资料,发现代码应该无法正常工作。 我在reducer中尝试了上面的代码,它成功了 let tmp = state.find
假设我有以下表格: CREATE TABLE Game ( GameID INT UNSIGNED NOT NULL, GameType TINYINT UNSIGNED NOT NU
代码: Alamofire.request(URL(string: imageUrl)!).downloadProgress(closure: { (progress) in
我是一名优秀的程序员,十分优秀!