我目前正在使用 VirtualHosts 在我的本地主机(xampp 1.8.1)上运行 CakePHP 2.3.4(http://sub.local/指向 c:/xampp/htdocs/cake/app/webroot/)。
我想为我的新闻页面构建一个评论功能,使用 AJAX 添加评论。因此,我只有一个 textarea 作为表单字段来输入评论:
<textarea class="expanding" placeholder="Write your comment..." name="comment[<?php echo $news['News']['id']; ?>]"></textarea>
除了新闻文本本身和页面的其余部分,这里仅此而已。文本将在按下回车键时提交,目前正在运行。完整的js函数:
$this->Js->buffer('
$("textarea").keypress(function(e) {
if(e.which == 13) {
if ($(this).val() != "") {
// submit via ajax
var formData = $(this).serialize();
' . $this->Js->request(
array(
'controller' => 'comments',
'action' => 'add',
'1'
),
array(
'method' => 'POST',
'async' => true,
'type' => 'json',
'data' => 'Testing comment.',
'success' => '
// delete textarea value
$(this).val("");
// add to form
$("#c-comments").prepend("comment div following here");
',
'error' => '
$("#c-errorBoxes").html(
\' Your comment was not added. \' + textStatus + \' \' + errorThrown + \' </div>\'
);
'
)
)
. '
}
e.preventDefault();
}
});
');
这两个代码都是我在视图文件中编写的。注释/添加/操作如下:
public function add() {
$id = 1;
$this->Comment->recursive = -1;
$comment = $this->Comment->findById($id);
return json_encode($comment);
}
这仅用于测试目的,应该可以工作。但尽管如此,我在 Firebug 中收到 500 内部服务器错误,并且错误框也显示在页面上。现在我不知道还能做什么。我尝试了很多我在这里读到的东西,但没有一个有用。
这里没有显示完整的数据库添加功能,因为即使调用 ajax 的成功功能也无法使用此代码。HTML 中 JavaScript 的输出是这样的(我在顶部删除了更多代码):
<script type="text/javascript">
//<![CDATA[
$(document).ready(function () {
$("textarea").autoResize();
$("a.comments").click(function() {
$(this).parent().parent().next("div.c-contentBodyBoxHide").slideToggle();
});
$("textarea").keypress(function(e) {
if(e.which == 13) {
if ($(this).val() != "") {
// submit via ajax
var formData = $(this).serialize();
$.ajax({async:true, data:"Testing comment.", dataType:"json", error:function (XMLHttpRequest, textStatus, errorThrown) {
$("#c-errorBoxes").html(
'<div class="c-box c-error">' +
' <img src="/img/status/error_32.png" alt="" />' +
' Your comment was not added. ' + textStatus + ' ' + errorThrown + ' </div>'
);
}, success:function (data, textStatus) {
// delete textarea value
$(this).val("");
// hide no comments if shown
$("#c-commentsNone").hide();
// add to form
$("#c-comments").prepend("bla");
// remove possible error message
$("#c-errorBoxes").html("");
}, type:"POST", url:"\/comments\/add\/1"});
}
e.preventDefault();
}
});
});
//]]>
</script>
我感谢更多的想法。