JQuery $ .post跨域和凭据

时间:2014-09-24 10:02:09

标签: jquery ajax post xmlhttprequest

我编写了一个Web应用程序,它使用了许多$.post调用JQuery。现在我想发送withCredentials: true来保持会话活着,在$.ajax中看起来像这样(并且也是这样的):

$.ajax({
            type: 'post',
            url: 'http://example.com/server/api.php',
            crossDomain: true,
            dataType: "json",
            xhrFields: {
                withCredentials: true
            },
            data: {
                username : 'test',
                password : 'test'
            },
            success: function (d) {
                $('body').html(d.status);
            }
        });

这是因为我现在想将PHP文件上传到我的服务器并使用Cordova导出客户端。 (withCredentials: true仅包含在我的localhost服务器上的测试中) 我可以将其打包到$.post电话中,还是需要更换所有电话? (我会写一个类似于$ .post的新函数)

1 个答案:

答案 0 :(得分:17)

您可以使用jQuery.ajaxSetup()设置每个ajax请求将使用的默认选项(包括$.post$.get

$.ajaxSetup({
    crossDomain: true,
    xhrFields: {
        withCredentials: true
    },
    username: 'test',
    password: 'test'
});

$.post('http://example.com/server/api.php', {
    username: 'test',
    password: 'test'
}, function (d) {
    $('body').html(d.status);
}, 'json');

此API的警告

  

注意:此处指定的设置将影响对$ .ajax的所有调用或   基于Ajax的衍生产品,例如$ .get()。这可能导致不良后果   因为其他调用者(例如插件)可能会期待这种行为   正常的默认设置。出于这个原因,我们强烈建议   反对使用此API。相反,在。中明确设置选项   调用或定义一个简单的插件来执行此操作。

来自jQuery文档的