data jqgrid

时间:2015-11-26 10:00:17

标签: jquery json jqgrid

使用dataUrl选项返回给select元素的json数据格式是什么?

以下是参数选择选项

的脚本
{
    name:'client',
    index:'client',
    jsonmap:'projetID.clientID.nom',
    editable: true,
    edittype:"select",
    width:110,
    editoptions: {
        datatype: "json",
        dataUrl:'http://localhost:8080/GestionCra/clientsRest/listJsonSelect',
        dataEvents :[
            { 
                type: 'change',
                fn: function(e) {
                    var thisval = $(e.target).val();
                    $.get('http://localhost:8080/GestionCra/projetsRest/listJsonSelect?id='+thisval, function(data) {
                                    var res = $(data).html();
                                    $("#projet").html(res);
                    }); // end get
                }//end func
            } // end type
        ] // dataevents
    }, // edit option 
    search:true,
    stype:'text'
}

以下是使用数据填充select元素的方法 返回字符串机智格式:id:value; id:value ...         //方法

@RequestMapping(value = {"/listJsonSelect"}, method = RequestMethod.GET)

public String listJsonSelect() {
    List<Client> listC=service.listClients();
    String clients="";
    for (Client client : listC) {
        clients+=client.getId()+":"+client.getNom()+";";
    }
    if(clients.length()>2)
        clients=clients.substring(0,clients.length()-1);
    return clients;
}

执行给出此jquery错误:未捕获错误:语法错误,无法识别的表达式:1:客户端1; 2:客户端2; 3:客户端3; 4:dfsdf; 5:sdfsdf; 6:sdfsdf; 7:sdfsd; 8:sdfsd; 9:sdfsd; 10:fsdf; 11:sdfsdf

2 个答案:

答案 0 :(得分:0)

Fixall.Site回答

根据jqgrid文档,您的问题是dataUrl需要返回包含select元素的HTML,而不是JSON: editoptions dataUrl参数仅对edittype:select元素有效。 dataUrl参数表示应从中获取html select元素的url。 设置此选项后,元素将填充AJAX请求中的值。数据应该是带有所需选项的有效HTML select元素 - 类似于:

<select>
<option value='1'>One</option>
<option value='2'>Two</option>
...
</select>

所以最简单的解决方案是让你只返回HTML。 也就是说,我不喜欢直接返回UI元素的想法。另一个选择是使用buildselect函数为您构造select元素: 仅当设置了dataUrl参数时,此选项才相关。当服务器响应无法构建select元素时,您可以使用自己的函数来构建select。该函数应该返回一个包含select和options值的字符串,如dataUrl选项中所述。传递给此函数的参数是服务器响应 这个答案提供了如何使用buildselect的示例。

答案 1 :(得分:0)

这是我在控制器中的代码。

    $datos= $this->findAll( $criteria );
    $data="<select>";

    foreach ($datos as $value){
        $data .="<option value='".$value->datoValidoId."'>".$value->datovalido."</option>";
    }
    $data .="</select>";

    return $data;