0

我正在研究对我来说是新的 ZEND 框架,AJAX 也是如此。我尝试了很多示例,但没有一个有效。

请告诉我我在这段代码中错了。

主页.phtml

<select name="year" onchange="saveChanges(this);">
                                    <option value="najam">Najam</option>
                                    <option value="Ali">Ali</option>
                                    <option value="Hassan">Hassan</option>
                                    <option value="Hassam">Hassam</option>

                                </select>
                                <script type="text/javascript">
                                    function saveChanges(object){   
    $.ajax({
        method :'POST',
        url: 'home',
        data: object.value,
        cache: false,
        error: function(e){
            alert(e);
            console.log("error" + e);
        },
        success: function(response){
            // A response to say if it's updated or not
            alert("Success" + object.value);
            console.log("Success");
        }
    });   
}
                                </script>

Home动作

if($this->_request->isXmlHttpRequest()){
//do this
}
else {
//do this
// It always in the else Part.

}

尽管它会在控制台和 javascript 警报消息上打印成功消息。

如果此代码有误,请帮助我

4

2 回答 2

1
method :'POST'

type: "POST"

我总是$this->_request->isXmlHttpRequest()用来检测 ajax 请求并一直在工作。

抱歉我英语不好

更新:

控制器:

final class IndexController extends Zend_Controller_Action
{
    final public function indexAction(){
        if($this->_request->isXmlHttpRequest()){
            header('Content-type: application/json;charset=UTF-8');
            exit(json_encode(($this->_request->getPost())));
        }
    }      
}

看法:

                            <select id="year" name="year">
                                <option value="najam">Najam</option>
                                <option value="Ali">Ali</option>
                                <option value="Hassan">Hassan</option>
                                <option value="Hassam">Hassam</option>
                            </select>
                            <script type="text/javascript">
                                $(function(){
                                   $("#year").change(function(){
                                       var _this = $(this);
                                        $.ajax({
                                            type :'POST',
                                            url: "", // empty string means current URL
                                            data: {year: _this.attr("value")},
                                            dataType: 'json',
                                            cache: false,
                                            error: function(e){
                                                console.log(e);
                                            },
                                            success: function(response){
                                                console.log(response);
                                            }
                                        });   
                                    });
                                });
                            </script>

这是源代码:

http://www.mediafire.com/?hvv4830macfl0wm

希望有所帮助!

于 2013-09-17T15:24:56.613 回答
1

在 Zend Framework 中,您可以将 a 添加ContextSwitch到您的操作中。基于上下文,动作将在相关模板中呈现。

例如

    public function init()
    {
        $contextSwitch = $this->_helper->getHelper('contextSwitch');
        $contextSwitch->addActionContext('list', 'xml')
                      ->initContext();
    }

在你的情况下

    $contextSwitch->addActionContext('home', 'ajax')

见这里http://framework.zend.com/manual/1.8/en/zend.controller.actionhelpers.html

编辑:那是针对 ZF1 的,如果您使用的是 ZF2,您可能需要查看View Strategy http://framework.zend.com/manual/2.0/en/modules/zend.view.quick-start.html#creating-and -注册替代渲染和响应策略

于 2013-09-17T12:50:38.437 回答