jQuery跨域发布重定向

时间:2013-09-04 16:11:07

标签: javascript jquery http cross-domain chargify

我正在尝试使用jQuery将表单POST到chargify。我的“网络”选项卡显示302重定向(红色表示错误),但jQuery抛出404错误。是否可以从浏览器中预先形成x-domain,post,redirect request或者我是否需要使用代理?

$(function() {

    var endpoint = "https://api.chargify.com/api/v2/signups"

    $('#new_sub_form').on('submit', function(e){

        e.preventDefault()

        var jqxhr = $.ajax({
            type: "POST",
            url: endpoint,
            crossDomain:true,
            data: $('#new_sub_form').serialize(),
            success: function(data, textStatus, request){
                console.log(request.getResponseHeader('Location'));
            },
            error: function (request, textStatus, errorThrown) {
                console.log(request.getResponseHeader('Location')); // Returns null
            }
        })
    })//on('submit')
})//ready()

更新(更多信息): 所以我意识到302正在将我重定向到我服务器上不存在的页面。不幸的是,一旦我解决了这个问题,我仍有一个问题。从我所知道的,我POST到chargify,然后他们用我指定的URI将302发送回浏览器。此URI位于我的服务器上(localhost for now)。一旦用户被重定向,我的服务器就会解析响应并返回JSON。我通过复制并粘贴到另一个选项卡中测试了响应标题位置并且工作正常。

Chargify仅提供https,而我的localhost是http。这会导致错误吗?! HTTP Response

2 个答案:

答案 0 :(得分:0)

前几天遇到一个非常类似的问题。但是我正在使用ASP.NET MVC4。

如果您使用crossDomain:true还不够,还需要添加, dataType: 'json or html depending on the return value', xhrFields: { withCredentials: true }, 您还需要添加这些标题“Access-Control-Allow-Origin:”http://yourdomain.net“, Access-Control-Allow-Credentials:true“和”Access“Control-Allow-Methods:GET,POST”在您的情况下以及您的回复。

答案 1 :(得分:0)

Chargify Direct不支持ajax / CORS。

您应该使用“transarent redirect”,如他们所描述的,这基本上是将用户重定向到Chargify的标准表单,并且他们会将用户再次重定向到您在有效负载中指定的URL。这意味着用户将暂时离开您的网站并返回该网站。

<form method="post" action="https://api.chargify.com/api/v2/signups">
</form>

文档:https://docs.chargify.com/chargify-direct-introduction