【问题标题】:Post form serialized data with additional parameter through ajaxsetup通过 ajaxsetup 使用附加参数发布表单序列化数据
【发布时间】:2016-03-16 22:24:29
【问题描述】:

我正在使用 $.ajax 提交表单,我想在提交中添加一个不属于表单输入的键值对,这对我的所有表单都很常见。 所以我计划将公共部分移动到ajaxsetup。 我想在 Action 中接收这些作为 ModelData、TokenKey 等两个参数 我的html代码

<form id="frm">
    @Html.TextBoxFor(m => m.Name)
    <input type="button" value="Test" onclick="AjaxPost(); return false;" />
</form>

我的 Java 脚本

$(function () {
        $.ajaxSetup({ data: { 'TokenId': 'TokenId Value'} });
    });

    function AjaxPost() {
        var frm = $("#frm");
        $.ajax({
            url: '/Home/Index',
            type: 'POST',
            data: frm.serialize(),
            success: function () { }
        });
    }

这行不通!如果我删除了 AjaxPost 函数 TokenId 正在发布的数据, 否则不是。

【问题讨论】:

  • 根据文档,它为未来的 Ajax 请求设置默认值。我想它不会在frm.serialize() 对象中添加新的key ..
  • 我可以知道您为什么不将键值对存储在隐藏字段中,以便它也可以与其他表单字段一起提交吗?
  • 最简单的方法是在表单中添加名为 TokenId 的隐藏字段并设置所需的值
  • 其实 TokenKey 与我的模型无关,它是表单 html 属性值,我想将其作为单独的字符串参数接收...
  • @Nishan Senevirathna,因为这是我所有创建和编辑表单所必需的,所以寻找通用方法...

标签: javascript jquery ajax model-view-controller


【解决方案1】:

我认为这是一个很好的解决方案:

$.ajaxPrefilter(function(options, originalData, xhr){
  if (options.data)
    options.data += "&TokenId=TokenValue";
});

这将影响所有 ajax 调用。查看代码笔DEMO

【讨论】:

  • 如果没有数据,$.ajaxPrefilter(function(options, originalData, xhr){ if (options.data) options.data += "&TokenId=TokenValue"; else if(! options.data.length) options.data = "TokenId=TokenValue"; });
【解决方案2】:

当您使用 jQuery serialize() 函数时,它只是将您的表单转换为格式为 a=1&b=2&c=3 的字符串。因此,您当然可以将此函数应用于两种形式并将结果连接起来,在它们之间使用 &,并在您的 ajax 调用中使用结果。您需要进行一些检查以确保在进行连接时两个字符串都不为空。

【讨论】:

    【解决方案3】:
    $.post(url,{key:value,data:frm.serialize},function(){
    //do somehting
    })
    

    我通常这样做很简单,您可以添加任意数量的key:value 对...

    【讨论】:

    • 可以通过ajaxsetup吗?
    【解决方案4】:

    您可以在表单中添加一个隐藏字段,其名称为 TokenId 和所需值。或者你可以像下面这样修改数据。

    data : fir.serialize()+"&TokenId=TokenId+Value";
    

    注意:您必须在附加之前对数据进行编码

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-04
      • 2016-11-09
      • 2010-10-15
      • 1970-01-01
      • 2023-02-18
      • 2017-03-02
      • 1970-01-01
      相关资源
      最近更新 更多