通过ajaxsetup发布带有附加参数的序列化数据

时间:2015-12-11 04:36:49

标签: javascript jquery ajax model-view-controller

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



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

我的Java脚本

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

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

这不起作用!如果我在AjaxPost函数中删除数据,TokenId正在发布, 否则不是。

4 个答案:

答案 0 :(得分:3)

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

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

这将影响所有ajax调用。查看codepen DEMO

答案 1 :(得分:1)

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

答案 2 :(得分:0)

<?php echo $this->Form->input('dealer_id1',array('label'=>false,'class'=>'custom-select','options' =>$dealerlist,'empty' => '','required'));  ?> 

我通常这样做简单易行,你可以添加你想要的$.post(url,{key:value,data:frm.serialize},function(){ //do somehting }) 对......

答案 3 :(得分:0)

您可以在表单中添加名称为TokenId和所需值的隐藏字段。或者您可以修改如下数据。

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

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