0

我目前正在使用 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>

我感谢更多的想法。

4

1 回答 1

2

解决了问题,因为 /app/tmp/logs 的提示给了我错误消息。问题是,控制器中的添加操作找不到视图 add.ctp(因为我没有创建)。

停止控制器渲染视图,只需添加

$this->autoRender = false;

在方法中(我选择了开头)并且没有搜索任何视图。该请求现在有效!

谢谢你的帮助!

于 2013-06-19T17:40:35.047 回答