Grails 3.0 Ajax调用控制器的方法,但不呈现视图

时间:2015-09-17 22:43:06

标签: ajax grails

视图显示表格中的用户列表。单击鼠标选择一个用户(行)。 JavaScript获取用户的信息和Ajax或调用控制器。 Controller将数据保存到会话并呈现视图。 Controller将数据存储在会话中,但从不呈现视图。没有记录错误。 任何帮助表示赞赏。我花了将近一个星期而无处可去。 以下是视图和控制器摘录。

function getRowDataFromTable(_row) { //get data of selected row
    /*input argument _row is the row number starting at 0 |   columns are fixed (5 cols) start at 1
     r0c1 r0c2 r0c3 r0c4 r0c5    r1c1 r1c2 r1c3 r1c4 r1c5  ........   rNc1 rNc2 rNc3 rNc4 rNc5*/

    var _id=document.getElementById("r"+_row+"c1").innerHTML;
    var  _firtsname=document.getElementById("r"+_row+"c2").innerHTML;
    var  _lastname=document.getElementById("r"+_row+"c3").innerHTML;
    var _kname=document.getElementById("r"+_row+"c4").innerHTML;
    var _email=document.getElementById("r"+_row+"c5").innerHTML;
    var _govtemp=document.getElementById("r"+_row+"c6").innerHTML;
    console.log("userid: " + _id);
    var data = {};    data.userid=_id;      data.firstname=varToString(_firtsname);     data.lastname=varToString(_lastname);//JS object
    console.log("data = {}: " + data.userid + " : " + data.firstname + " : " + data.lastname + " : ");

    invokeController(data);  
}

function invokeController(data){ 
    $.ajax({
        url:'${g.createLink( controller:'SummaryOfProjectWithPL', action:'summarize_withPL')}',
        data: JSON.stringify(data),
        type: 'post', //'get'
        contentType: 'application/json; charset=utf-8',
        dataType: 'json'
    });
 }

.......

控制器:

class SummaryOfProjectWithPLController {     static defaultAction =" summarize_withPL"     .....     def summarize_withPL(){

    println('..... SummaryOfProjectController.summarize_withPL() [to select/change Project Leader] ')
    def userID_PL=jsonObj.userid; def userFirstName_PL=jsonObj.firstname; def userLastName_PL=jsonObj.lastname
    //update scoped session data by adding these to session
    userID_PL=session.userID_PL; userFirstName_PL=session.userFirstName_PL; userLastName_PL=session.userLastName_PL
    println(' session data ' + session.userID_PL + ' | '+ session.userFirstName_PL + ' | '+ session.userLastName_PL)

    render (view:'/newproject/summaryOfProject.gsp', 
           model: [userFirstName: session.userFirstName, userLastName: session.userLastName, userID: session.userID ,
                   userID_PL: session.userID_PL,  userFirstName_PL: session.userFirstName_PL, userLastName_PL: session.userLastName_PL ])
   }

....

1 个答案:

答案 0 :(得分:0)

因为您正在使用AJAX,summaryOfProject.gsp视图呈现到AJAX响应,而不是通知浏览器重定向到该页面。如果您的AJAX请求成功,您将在回调处理程序的msg变量中看到summaryOfProject.gsp的HTML呈现。作为测试,您可以将其写入javascript控制台进行确认。

基本上,你想要实现的并不能完全修复AJAX模型。什么适合这样的过程:

  1. 添加人员按钮会打开一个HTML对话框(例如Twitter Bootstrap生成的对话框)。
  2. 在对话框中,您可以在第二页中执行您当前正在执行的操作。
  3. 当您收到AJAX回调时,请使用其中的数据更新现有页面。
  4. 这意味着整个交易仍然在同一页面上。这就是AJAX的优点所在。有关如何在Grails中执行此操作的示例,请参阅Grails Ajax table - how to implement?