【问题标题】:How to add data parameter in ajaxSend properly?如何在 ajaxSend 中正确添加数据参数?
【发布时间】:2014-01-26 06:59:39
【问题描述】:

在某些情况下,我需要以编程方式将 POST 参数添加到 AJAX 请求中。

我正在尝试这样的事情:

$(document).ajaxSend(function(event, jqXHR, ajaxOptions) {
    ajaxOptions.data = "additional_key=additional_value&" + ajaxOptions.data;
    ajaxOptions.context.data = "additional_key=additional_value&" + ajaxOptions.context.data;
    console.log(ajaxOptions, 'ajaxOptions');
});

但是附加键没有出现在 $_POST 数组中。

【问题讨论】:

    标签: javascript php jquery ajax jquery-1.4


    【解决方案1】:

    您可以为此使用ajaxPrefilter

    $.ajaxPrefilter(function(options, originalOptions, jqXHR) {
        if (originalOptions.type !== 'POST' || options.type !== 'POST') {
            return;
        }
    
        options.data = $.extend(originalOptions.data, { yourdata : yourvalue });
    });
    

    更多信息请参见http://api.jquery.com/jquery.ajaxprefilter/

    【讨论】:

    • 谢谢,但我需要使用 jQuery 1.4.4。在这个平台上使用 Drupal 7 和更新版本的 jQuery 会导致问题
    • ajaxPrefilter 添加到 jQuery 1.5 版中。
    • 顺便说一句,你没有提到 jQuery 版本。
    • 赞成这个答案,因为即使这也不符合 OP 的需求(jq 1.4.4),我猜这对未来的读者很有用......
    【解决方案2】:

    测试你上面的代码给了我一个ajaxOptions.context未定义的错误。

    首先,我建议您先检查是否存在:(假设将要定义上下文)

    if(ajaxOptions.context) {
        ajaxOptions.context.data = "additional_key=additional_value&" + ajaxOptions.context.data;
    } else {
        ajaxOptions.data = "additional_key=additional_value&" + ajaxOptions.data;
    }
    

    发送一个模拟 AJAX 请求向我表明,在 Firebug 中检查时数据正在传递。

    我通过删除上下文行来测试代码,它似乎工作:

    代码:

    $(document).ajaxSend(function(event, jqXHR, ajaxOptions) {
        if(ajaxOptions.context) {
            ajaxOptions.context.data = "additional_key=additional_value&" + ajaxOptions.context.data;
        } else {
            ajaxOptions.data = "additional_key=additional_value&" + ajaxOptions.data;
        }
    });
    
    $.ajax({
        'url': 'test.php',
        'data': {'foo':'bar'},
        'type': 'POST'
    });
    

    检验:

    Key             Value
    additional_key  additional_value
    foo             bar
    

    编辑:使用 JQuery 1.7.1 测试我注意到您运行的是较低版本的 jQuery。

    【讨论】:

      【解决方案3】:
      $(document).ready(function() {
          $(document).ajaxSend(function(event, jqXHR, ajaxOptions) {
              if (ajaxOptions.extraData) {
                  ajaxOptions.extraData.additional_key = 'additional_value';
              }
          });
      });
      

      这只对我有用(jQuery 1.4.4)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多