Zend的形式:平变化选择加载另一个视图内容(Zend Form: onchange select

2019-08-02 02:19发布

在我的应用程序在控制器/索引的形式,组成了3个选择框。 当所有三个框有值选择,我需要表现出基于这些选择值相同的观点额外的HTML和额外的表格选项。 显而易见的解决方案似乎使一个AJAX调用来处理数据库的操作,并创建一个视图,并装载该浏览到控制器/ index.phtml另一个动作

我已经能够通过使用加载在index.phtml另一个动作视图:

$('#select').change(function() {
    event.preventDefault();
    var id = $(this).attr('id');
    $('#results').show();
    $('#results').load('/controller/index/' + $(this).attr('value'));
    return false;
});

不过,我需要通过的所有三个选择框的变量和我交替使用:

$('#select1').change(function() {
var select1     = $('#select1').val();
var select2     = $('#select2').val();
var select3     = $('#select3').val();
$.ajax({
    type: 'POST',
    dataType: 'json',
    url: '/controller/index/',
    data: { select1: select1, select2: select2, select3: select3},
    success: function(result){
                var return1 = result.return1;
                var return2 = result.return2;
         }
    });

});

最后一个方法的工作,据我确实看到在头传递变量和响应包含的观点,但我不能确定它的AJAX观点只是内容放在索引视图中。 (Ofcourse通过不使用AjaxContent切换时,AJAX视图将加载但包括完整的布局为好。)凡是我在AJAX动作或AJAX视图回声不会在索引视图显示。 任何指针会更受欢迎

编辑

阿贾克斯动作现在看起来像

$this->view->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);

$select1 = $this->_request->getParam('select1');
$select2 = $this->_request->getParam('select2');
$select3 = $this->_request->getParam('select3');

// DO THE OTHER STUFF AND LOGIC HERE

$results = array(
 'return1' => 'value1',
 'return2' => 'value2'
);

$this->_response->setBody(json_encode($results));

和控制器初始化

public function init() {
$ajaxContext = $this->_helper->getHelper('AjaxContext');
$ajaxContext->addActionContext('ajax', 'json')->initContext();
}

所以,一切正常,我可以在我的浏览器中使用的开发工具(网络)查看响应返回的值,但我只是不知道如何使用它来“更新”的观点

Answer 1:

你可以做两件事情:

  • 你可以让你通过AJAX调用动作的布局。 看你有没有禁用的布局,即使AJAX动作的视图PHTML文件中包含的东西,它不会显示。 您可以启用布局,而不是使用文本/ HTML的dataType json和地方显示返回的HTML。
  • 或者,在success的Ajax调用的事件,写的JavaScript代码更新DOM。


Answer 2:

感谢@Salman您的建议,因为他们使我在正确的方向,我设法解决这个问题。 我设法将它们作为获取参数传递与阿贾克斯.load()调用多个参数。 所述ajaxAction的结果然后可以在ajax.ajax.phtml视图进行格式化和驻留在其中的选择框是index.phtml的#results格内中连续示出。

控制器/ index.phtml

<div id="results" style="display:block;">Select all three values</div>

索引控制器init和ajaxAction

public function init() {
    $ajaxContext = $this->_helper->getHelper('AjaxContext');
    $ajaxContext->addActionContext('ajax', 'html')->initContext('html');
}

public function ajaxAction() {

    $select1    = $this->_request->getQuery('select1');
    $select2    = $this->_request->getQuery('select2');
    $select3    = $this->_request->getQuery('select3');

    $form   = new Application_Form();

    // Database operations and logic

    $this->view->form       = $form;
    $this->view->array      = $somearray;
    } 
}

在index.phtml jQuery脚本

$(document).ready(function(){

    $('.selector').change(function() {
        var select1 = $('#select1').val();
        var select2 = $('#select2').val();
        var select3 = $('#select3').val();
        if ( select1 && select2 && select3) {
            $('#results').show();               
            $('#results').load('/controller/ajax?select1=' + select1 + '&select2=' + select2 + '&select3=' + select3);
        }
    });

});

控制器/ ajax.ajax.phtml

<?php if ( $this->array ) : ?>
    <?php echo( $this->form ); ?>
<?php else: ?>
    Nothing found for selected values
<?php endif ?>


文章来源: Zend Form: onchange select load another view content