【问题标题】:jqgrid - how to add parameters to extraparam of saveRow in inline editing modejqgrid - 如何在内联编辑模式下将参数添加到saveRow的extraparam
【发布时间】:2012-02-02 04:40:34
【问题描述】:

我有一个字符串:

var str = "it's a beautiful day";

我将这个字符串传递给函数:

rowSave(id, str);

rowSave()

var rowSave = function(id, str){
    jQuery("#myjqgrid").jqGrid('saveRow',id,{
        "succesfunc": function(response) {              
            return true;                
        },                                  
        "url": "server.aspx",
        "mtype": "GET",
        "extraparam": {}
    });
}

我想做的事

我想要

  • 根据空格分割字符串
  • 字符串中的每个单词(拆分后)都应作为extraparam 中的参数传递,以便将其附加到url。

我不知道该怎么做。

根据 Oleg 的建议(见下文),在我的 jqgrid 定义中添加到 ajaxRowOptions: {cache: false}

$("#myjqgrid").jqGrid({
   ajaxRowOptions: {cache: false}
});

【问题讨论】:

  • extraparam 的格式与postData 的格式相同:您的值是具有 {property1: 'value1', property2: 'value2'} 等属性的对象。因此,您不仅应该在问题中定义值(“字符串中的每个单词”),还应该定义属性的名称。此外,您写道,这些值应该“附加到 url”。仅当您使用 HTTP GET 而不是在 HTTP POST 的情况下(例如默认设置)时,这些值才会附加到 URL。
  • 另外你使用"url": server.aspx 这是一个语法错误。 server.aspx 应该被引用,url 是否被引用并不重要。所以你应该使用url: 'server.aspx'url: "server.aspx""url": "server.aspx" 而不是"url": server.aspx
  • @Oleg:我知道extraparam 的格式,我正在使用GET。拆分字符串后,我不知道如何分配值和不同的属性名称。有没有办法编写一个函数并遍历它们然后分配它们。我试过这样做,但它不起作用。
  • 是的,可以这样做,但是您需要哪些属性的名称。我的意思是服务器部分需要知道完全相同的名称转换才能读取它。像p1p2p3、...这样的名字好吗?您可以使用一个参数来代替它发送字符串的方式。在服务器上可以更容易地拆分具有已知参数名称的一个参数。是吗?
  • 参数名称可以是“A”、“B”、“C”……实际上需要在客户端完成。所以,它应该是格式——"A":"It's", "B":"a", "C":"beautiful", "D":"day"

标签: javascript jquery jqgrid


【解决方案1】:

你可以定义一个类似下面的函数来构建额外的参数对象:

function encodeStr(str){
    var s = str.split(' '), i, result = {};

    for (i = 0; i < s.length; i++){
        result['param' + i] = s[i];
    }

    return (result);
}

jQuery.ajax 由 jqGrid 内部使用,可以确保正确的序列化。如果遇到问题,请使用encodeURIComponent 对每个参数进行编码。

不管怎样,当你指定你的参数时,只需调用这个对象:

"extraparam": encodeStr(str)

【讨论】:

  • 太棒了!这正是我一直在寻找的。非常感谢你:)
【解决方案2】:

代码大概如下:

var rowSave = function(id, str) {
    var strParts = str.split(' '), l = strParts.length, i, obj = {},
        codeStart = 'A'.charCodeAt(0); // 65

    for (i = 0; i < l; i++, codeStart++) {
        obj[String.fromCharCode(codeStart)] = strParts[i];
    }
    $("#myjqgrid").jqGrid('saveRow', id, {
        succesfunc: function(response) {
            return true;                
        },                                  
        url: "server.aspx",
        mtype: "GET",
        extraparam: obj
    });
}

首先将obj 填充为{A: "it\'s", B: "a", C: "beautiful", D: "day"},然后将其用作extraparam 的值。

【讨论】:

  • 感谢您的宝贵时间和回复。
  • @SK11:不客气!因为您使用mtype: "GET",您可能会遇到在 IE 中缓存 Ajax 请求的问题。所以我推荐你使用jqGrid的ajaxRowOptions: {cache: false}参数。
  • 谢谢。我在参数中添加并更新了我的帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-01
  • 1970-01-01
  • 2016-10-07
相关资源
最近更新 更多