javascript - Zend Framework 1.12,ContextSwitch或AjaxContext不会禁用布局和其他问题

标签 javascript ajax zend-framework ajaxcontext

环境:
Windows 8
阿帕奇2.4
ZF 1.12
PHP 5.4
用于与服务器的后台连接的YUI框架

我正在尝试执行一个非常简单的ajax / js组合,其中用户与之交互:

2 of 4 people found this review helpful. Was this review helpful to you? Yes No


当用户点击是/否时,应通过ajax / js更新4之2。我的ReviewController的init()方法中有以下代码(扩展了Zend_Controller_Action)。请注意,执行此操作(feedbackAction)的视图脚本为/views/scripts/review/feedback.json.phtml

 $ajaxContext = $this->_helper->getHelper('AjaxContext');
 $ajaxContext->addActionContext('feedback', 'json')
             ->initContext();


执行feedbackAction时,会跳出一个异常,指出它找不到feedback.phtml。这告诉我,AjaxContext实际上并未附加“ json”格式。为什么会这样呢?
我在某处读到应该在操作内部调用initContext()。我尝试过...同样的例外。

然后,我尝试使用ContextSwitch,但似乎超出了使AjaxContext成为ContextSwitch的子类的目的。 ReviewController中的init()中的代码被替换为:

    $contextSwitch = $this->_helper->getHelper('contextSwitch');
    $contextSwitch->addActionContext('feedback', 'json')
                ->initContext();


这次,莫名其妙地,没有发生异常,而是呈现了以下内容:标头代码(由我的_header.phtml文件生成,由我的layout.phtml文件调用)。我一点都不明白。我已经了解(显然不是很好),如果启用了“ addActionContext” + initContext()禁用布局。 ¿?

编辑
我发现它不是我的_header.phtml文件中的html内容,而是另一个由于我添加到actionStack中的操作而呈现的.phtml文件中的内容。处理完之后,将呈现以下内容:

{"originalModule":"default","originalController":"review","originalAction":"feedback","result":true,"id":1,"helpful_yes":"3","helpful_total":"4"}


多亏了在我的ReviewController()的init()方法中启动的ContextSwitch帮助器,将$ this-> view中放置的变量呈现为json。当我说“这被表达”时,是因为我在地址栏中输入了以下网址:http://localhost/PlacesforKids/public/review/feedback/format/json/id/1/helpful/1

可能是由YUI框架发送的URL。

我之所以说“应该是”,是因为在我的javascript成功函数中(当ajax调用成功执行时,由YUI框架调用了),我进行了以下处理:alert(response),以打印出我得到的响应...并且它打印出整个shabang:html标签,标头...等。我不知道怎么可能。

当时我以为我可能会滥用YUI框架,所以我尝试更改为jquery.js。为此,我将this的副本复制到名为jquery.js的文件中,并将其放在我的/ public / js目录下。这是它对服务器进行的ajax调用:

$.ajax({
url: sUrl,//that would be   
          //localhost/PlacesforKids/public/review/feedback/format/json/id/$id/helpful/$helpful
type: "GET",
async: false,
success: function(response){
    alert(response);
}


});

这是全部的HILARIOUS部分,ReviewController的操作无论如何都不会被调用。取而代之的是,重新渲染最后渲染的视图,这意味着它正在重新发送由last动作(与ReviewController属于不同的控制器)调用的视图脚本生成的内容。我知道它已被重新渲染,因为在作为该视图脚本所有者的操作中,我添加了以下内容:

if($this->getRequest()->getQuery('ajax') == 1)
            throw new Exception ("WRONG controller's action being called");


但是它永远不会抛出异常。

编辑我认为我知道了,但是我需要知道如何清洁baseUrl()
因此,我在Chrome浏览器中打开了Java控制台,以便可以查看我的reviewFeedback.js通过$ .ajax()方法发出的实际http请求。有趣的是,这就是我得到的:

    Request URL:http://localhost/PlacesforKids/public/place/index/id/localhost/PlaceforKids/public/review/feedback/format/json/id/1/helpful/0
Request Method:GET
Status Code:200 OK
Accept:*/*
Referer:http://localhost/PlacesforKids/public/place/index/id/1
X-Requested-With:XMLHttpRequest


为什么世界上是$ ajax()将我拥有的URL附加为GET到现有URL?这意味着我试图通过$ .ajax()生成的任何URL都会被附加到我的“引荐来源网址”中。因此,我只需要清理它并从零开始,对于我的意思是url ...我该如何在zend框架中做到这一点?有任何想法吗?

现在,如果我直接将sUrl中的字符串(localhost / PlaceforKids / public / review / feedback / format / json / id / 1 / helpful / 0)输入到我的浏览器的地址栏上,它就会按照预期的方式进行打印列出由ReviewController设置的$ this-> view中的变量,并将其作为json发送。

{"originalModule":"default","originalController":"review","originalAction":"feedback","result":true,"id":1,"helpful_yes":"3","helpful_total":"4"}


我在YUI框架中遇到了同样的问题。我要疯了。

我真的可以使用帮助,谢谢。

最佳答案

您需要将ajax请求更改为异步模式:async: true

关于javascript - Zend Framework 1.12,ContextSwitch或AjaxContext不会禁用布局和其他问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16765803/

相关文章:

c# - 将上传文件与表单数据一起发送

javascript - jQuery/Ajax - $.ajax() 将参数传递给回调 - 使用的好模式?

javascript - JS : Play clip on mouseover

javascript - Reactjs 中的错误 : Highcharts error #13: www. highcharts.com/errors/13/

javascript - jQuery 选择器 : all but n first in a row

javascript - Polymer - Iron Ajax - 如何处理错误响应

php - 将 Smarty 与 Zend 集成有什么优势吗?

php - Zend Forms 模块包含路径

php - 如何防止两个用户注册相同的用户名?

javascript - 如何在javascript中并行调用多个动态await