【问题标题】:Add a parameter to all ajax calls with method POST made with jQuery使用 jQuery 制作的方法 POST 向所有 ajax 调用添加参数
【发布时间】:2015-12-11 12:56:13
【问题描述】:

答案与Adding a general parameter to all ajax calls made with jQuery 类似,但我只需要为带有方法post 的ajax 调用添加额外的参数:

$.ajax({
  url: url,
  type: "POST",
  data: data,
  success: success,
  dataType: dataType
});

我是否可以在不直接将参数添加到所有 ajax 调用(就地编辑)的情况下实现这一点,即通过某种常见配置通过设置参数?

【问题讨论】:

  • 您可以尝试拥有两个数据变量。一个用于发布,一个用于获取。
  • 除了@VigneswaranMarimuthu 的评论,你可以看看originalOptions.type 看看是不是"POST"

标签: javascript jquery ajax


【解决方案1】:

感谢 cmets。

我还发现这篇文章很有用:jQuery's ajaxSetup - I would like to add default data for GET requests only

解决方案(尚未完全测试):

$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
    if (originalOptions.type == 'POST') {
        originalOptions.data = $.extend(
            originalOptions.data,
            {
                some_dummy_data: 'lksflkdflksdlkf'
            }
        );
    }
});

附注我的最终解决方案:

$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
    if (options.type.toLowerCase() == 'post') {
        options.data += '&some_dummy_data=lksflkdflksdlkf';
        if (options.data.charAt(0) == '&') {
            options.data = options.data.substr(1);
        }
    }
});

变化:

  1. options.type 包含小写的帖子(以防我添加 toLowerCase)
  2. options.data 是字符串,不是对象,所以我通过纯字符串操作重写了查询更改
  3. originalOptions 没用,但使用 options 可以。

【讨论】:

  • 我认为你不需要 - originalOptions.data = $.extend(originalOptions.data, {some_dummy_data: 'lksflkdflksdlkf'});。 $.extend 将合并到目标对象originalOptions.data。此外,您不需要$.extend。您可以简单地添加originalOptions.data.<PROPERTY> = <VALUE>,除非您要向原始选项添加更多属性
  • 在我的情况下,originalOptions 操作并没有帮助我实现所需的结果。而options.data 是字符串,而不是对象。我已经更新了答案。感谢您的帮助。
猜你喜欢
  • 2013-10-06
  • 2017-08-23
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
  • 1970-01-01
  • 2019-12-07
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多