Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何更新zf2视图_Jquery_Zend Framework2 - Fatal编程技术网

Jquery 如何更新zf2视图

Jquery 如何更新zf2视图,jquery,zend-framework2,Jquery,Zend Framework2,我想知道如何在zend framework 2中更新视图。我想我可以这样做,只要第二次调用构建视图的动作。但它似乎不起作用 故事是这样的,我显示了一个表(仅供参考,这是一个计划),当人们点击“下个月”/“上个月”等链接时,我想在这个表中插入一些元素,所以我想,“嘿,我可能会再次调用我的操作,有一个参数,这样做我甚至会避免重建整个表,我只会从我的数据库中得到“下个月”“/”上个月“信息”。 但是代码的行为很奇怪,第一次访问页面时,表本身构造正确,但是当我尝试单击“nextmonth”/etc链接时

我想知道如何在zend framework 2中更新视图。我想我可以这样做,只要第二次调用构建视图的动作。但它似乎不起作用

故事是这样的,我显示了一个表(仅供参考,这是一个计划),当人们点击“下个月”/“上个月”等链接时,我想在这个表中插入一些元素,所以我想,“嘿,我可能会再次调用我的操作,有一个参数,这样做我甚至会避免重建整个表,我只会从我的数据库中得到“下个月”“/”上个月“信息”。 但是代码的行为很奇怪,第一次访问页面时,表本身构造正确,但是当我尝试单击“nextmonth”/etc链接时,视图不会自动更新。 但是,再次使用JS函数success,我可以看到操作被正确调用,并返回正确的更新视图,该视图应该被显示……但没有显示,它仍然是原始视图

一些代码可以帮助您理解:

创建视图的操作包括:

public function projectAction( )
{
    $mod=$_POST['mod'] ;

    if ( $mod == NULL )
    {   
        //create and populate $tableRes
    }

    else // mod != NULL
    {
         echo "fooooooooooooo, I'm a test !!!" ;
        //modify $tableRes using mod value 
    }


    $viewModel = new ViewModel(array(
                                     'projectTable' => $tableRes ,
                                    )
                              ) ;
    $viewModel->setTerminal(true);

    return $viewModel ;
}
观点:

public function projectAction( )
{
    $mod=$_POST['mod'] ;

    if ( $mod == NULL )
    {   
        //create and populate $tableRes
    }

    else // mod != NULL
    {
         echo "fooooooooooooo, I'm a test !!!" ;
        //modify $tableRes using mod value 
    }


    $viewModel = new ViewModel(array(
                                     'projectTable' => $tableRes ,
                                    )
                              ) ;
    $viewModel->setTerminal(true);

    return $viewModel ;
}
<?php echo $this->headScript()->prependFile($this->basePath() . '/js/projet_b_JS/animation.js')
                              ->prependFile($this->basepath() . '/js/projet_b_JS/projectListener.js')
?>

<table id="projectTable">
<caption> Tableau Projet </caption>
<?php
    //print the projectTable/$tableRes table
?>
</table>

<a onClick='rigTable(-1)'> prev Month </a> <a onClick='rigTable(+1)'> next Month </a> <br />
<a onClick='rigTable(-12)'> prev Year </a> <a onClick='rigTable(12)' > next Year </a> <br />

表项目
上个月下个月
上一年下一年
AJAX调用:

//inside animation.js
function rigTable ( $mod )
{
  $.ajax({ type : 'POST',
    url : './application/project/project',
    data : { mod : $mod } ,
    success : function ( testReturn )
          {
             alert(testReturn) ;
          },
          error : function ()
         {
                 alert("error from rigTable JS function <br />") ;
         }
      }) ;
}
//inside animation.js
功能表($mod)
{
$.ajax({type:'POST',
url:“/应用程序/项目/项目”,
数据:{mod:$mod},
成功:函数(testReturn)
{
警报(testReturn);
},
错误:函数()
{
警报(“来自rigTable JS函数的错误
”; } }) ; }
因此,当我点击时,我会弹出一个警报,告诉我类似于:

fooooooooooooo, I'm a test !!! //rest of the view code 呜呜,我是个测试!!! //视图代码的其余部分 我搜索了refreshView()方法,但没有找到任何方法。我肯定是用了错误的方法,思考太多了,但我没有找到其他方法。如果您能提供任何帮助,我们将不胜感激,非常感谢您阅读这篇长文章


PS:我对zf2框架还是新手,我也不太习惯“MVC框架编程”。因此,如果这是一个愚蠢的问题,请原谅。

首先,不要这样做:

$mod=$_POST['mod'] ;
如果要获取POST变量,请使用请求对象!

所以你会有

$mod=$this->getRequest()->getPost('mod');
对于你的错误,听起来很奇怪……我想这可能是你的$tableRes算法的问题。 尝试传递一个字符串以测试视图是否实际“刷新”

比如:

if($mod!=NULL){
  $tableRes="blablabla";
}
else{
  $tableRes=array().....
}
如果它确实打印表格而不是字符串,那么这可能会很复杂:p

编辑:嗯,我读得太快了。你想用AJAX刷新你的表吗?我建议你先尝试不使用AJAX(重新加载页面)

目前,您希望显示的Viewmodel对象“存储”在testReturn变量中。到目前为止,ZF2中没有使用AJAX,但我认为您做得不对:p。在internet上进行快速搜索,我将进入本教程。您可以在那里找到您的答案:


这是关于表单的,所以您的案例应该更简单;)

好的,samsonik教程安慰我没有正确的刷新方法。所以我避开了这个问题。我觉得有点傻,因为我之前没有想到这个。。。 我刚刚将我的JS成功部分修改为:

success : function ( testReturn )
 {
    $('#project').html(testReturn) ;
 },
很有魅力。但我可能仍然错过了一些东西,稍后我会仔细看看。我现在必须继续:/。
谢谢你给我的提示(对不起,我不能投票支持你,需要15个名声。)

我已经尝试过类似if($mod==NULL)$tableRes=“teeeest" ; else$tableRes=NULL;但是视图也不会刷新。PS:我会尝试使用请求对象。好的,我会读这篇文章,然后回来告诉你我是否能让它工作。谢谢你的支持。