在每个AJAX调用中发送相同数据的正确方法

时间:2015-10-22 05:59:19

标签: javascript jquery ajax

我想创建一个基本的AJAX设置来发送用户名和密码配置以及每个AJAX调用。我不是在讨论这是否是正确的方法,这对我的项目是必须的,并且还有其他安全配置,所以......

我认为使用创建数据的jQuery.ajaxSetup(options)选项对象,但是当我为POST函数定义其他数据时,数据对象将被覆盖。

P.S。我相信没有必要展示我做了什么或我的代码在哪里等等。我希望问题本身是显而易见的。

5 个答案:

答案 0 :(得分:2)

您可以使用 beforeSend $.extend request添加包含常用详细信息的额外详细信息,如下所示:

$.ajax({
        url:'someurl',
        type:'POST',
        beforeSend: function(jqXHR, settings) {
              settings.data = $.extend(
                      settings.data, { 
                      //your new data here 
                      }
              );
              return true;
        }
        //other related things
})

答案 1 :(得分:1)

您可以使用$.extend()向基本配置添加其他信息:

var defaultConfig = {username: "User", password: "Insecure Plain Password"};

$.ajax({
    url: 'launchMission.php',
    data: $.extend(defaultConfig, {missionId: 15, destroyUniverse: true})
});

答案 2 :(得分:1)

你错了!在ajaxSetup中设置默认数据,然后在ajax调用中添加更多数据本身不会覆盖默认数据。

它像这样工作

$.ajaxSetup({
    data: {
        username: "Bill Gates",
        password: "Nerdman"
    }
});

$.ajax({
    type: "get",
    url: "script.php",
    data: {
        id: 4,
        company: "Microsoft"
    }
});

最终的网址为script.php?username=Bill+Gates&password=Nerdman&id=4&company=Microsoft",制作请求中发送的最终数据对象

data: {
    username: "Bill Gates",
    password: "Nerdman",
    id: 4,
    company: "Microsoft"
}

所有数据 将被发送 ,并且与POST请求相同,所有数据都将被添加。

这是一个Fiddle,检查控制台中的URL,并且所有添加的数据都在那里,因为数据对象是累积的,并且为每次调用添加到$.ajaxSetup,它永远不会被覆盖。

然而,jQuery还提供了用于这种数据操作的预过滤器,只需编写一次代码,而不是使用beforeSend,就可以在发送之前将数据添加到所有ajax调用中。每次通话

var settings = {
    username: "Bill Gates",
    password: "Nerdman"
}

$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
    options.data = $.param($.extend(originalOptions.data, settings))
});

// later

$.ajax({
    url  : 'something.php',
    data : {"more" : "data"} // the above settings will be added as well
});

答案 3 :(得分:0)

不是直接调用ajax方法,而是创建一个基本javascript函数,并让所有页面使用$.extend()扩展此基本方法。在此基本文件中创建sendAjax方法,并将选项作为参数。然后将配置添加到此数据并进行ajax调用。在每个需要进行ajax调用的类中,调用sendAjax()方法并传入数据和选项

答案 4 :(得分:0)

我想你会通过阅读jQuery.ajaxSetup's documentation来找到答案:

  

出于这个原因,我们强烈建议不要使用此API。相反,在调用中显式设置选项或定义一个简单的插件来执行此操作。

基本上,他们建议在jQuery.ajax周围创建自己的包装器(它可以是jQuery插件的形式)。