【问题标题】:Ajax Post to a different domain url , redirect to another urlAjax 发布到不同的域 url,重定向到另一个 url
【发布时间】:2016-06-26 21:10:42
【问题描述】:

我应该打电话给第三方供应商 - Cyber​​source 使用他们的静默订单帖子。问题是我有一个手风琴页面,它有 3 个窗格、帐户创建、服务地址和计费(在第三个窗格上)。

我正在尝试从 [http://mydomain/billing][1] 到 [http://cybersource/silentorderpost/pay][1] 进行 ajax 调用。

在帖子参数中,我设置了响应 url = [http://mydomain/billing][1] 这是 CS 将响应发回的地方。

当 Ajax 帖子从我的网站转到 CS 网站时,我没有收到回调,但 Cyber​​source 将回复发布回我的网站 [http://mydomain/billing][1],这会重新加载我试图避免的整个手风琴页面。我了解在 Ajax 调用期间,Ajax 期望在与“被调用的 Web 服务”相同的域上得到响应,即我的 Ajax 帖子期望 Cyber​​source 将响应发布在类似 [http://cybersource/response][1].但是,CS 将响应发布或重定向到我的网站,这可能是原因,我从来没有收到我的回电。当响应发布时,我的整个手风琴页面重新加载,这会导致各种问题。

我的代码:

     function myFunction() {
        //document.getElementById("myForm1").submit();
        var http= new XMLHttpRequest();
        var url = "https://testsecureacceptance.cybersource.com/silent/pay";
        var params = document.getElementById("queryStr");
        http.open("POST", url, true);
        http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        http.send(params);
        //Send the proper header information along with the request


        http.onreadystatechange = function() {//IT NEVER COMES BACK TO THIS SECTION
            if(http.readyState == 4) {
                alert(http.responseText);
                console.log("I came back");
            }
        }

    }
</script>

USING JQUERY:

功能我的功能(){ //document.getElementById("myForm1").submit(); var http=新的 XMLHttpRequest(); var url = "https://testsecureacceptance.cybersource.com/silent/pay"; var params = document.getElementById("queryStr"); var jqxhr = $.post(网址,函数(){ 警报(“成功”); }) .完成(函数(){ alert("第二次成功"); }) .失败(函数(){ 警报(“错误”); }) .总是(函数(){ 警报(“完成”); }); // 为上面的请求设置另一个完成函数 jqxhr.always(函数(){ alert("第二次完成"); }); }

有什么解决办法吗?

【问题讨论】:

  • 看来你没有发送请求,如果你使用原生XMLHttpRequest对象你需要在xhr.open()之后调用xhr.send()方法
  • @ArchLicher 我也尝试过使用 Jquery function myFunction() { //document.getElementById("myForm1").submit(); var http=新的 XMLHttpRequest(); var url = "testsecureacceptance.cybersource.com/silent/pay"; var params = document.getElementById("queryStr"); var jqxhr = $.post( url, function() { alert( "success" ); }) .done(function() { alert( "第二次成功" ); }) .always(function() { alert( "完成" ); }); }

标签: javascript


【解决方案1】:
var xhr = new XMLHttpRequest();
xhr.open('POST',url,true);
var params = document.getElementById("queryStr");
// you need to call this method: 
xhr.send(params);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
    //return stuff
} else {
    //return stuff
}
}

就像我在评论中写的那样,您还需要通过xmlhttprequestObject.send() 将您的请求发送到服务器,然后readystate 才能更改。

问候

【讨论】:

  • 它不起作用。网络资源响应具有此代码 window.onload = function(){ document.forms['custom_redirect'].submit();这基本上将响应转发到我的域,我得到错误 XMLHttpRequest cannot load testsecureacceptance.cybersource.com/silent/pay。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'localhost:8080' 不允许访问。响应的 HTTP 状态代码为 403。
【解决方案2】:

我找到了一条出路。在我的表单上,我添加了一个 iframe,现在当我收到来自 CS 的发布响应时,我的页面不会重新加载,而是在 iframe 中更新响应。

   <form action="https://testsecureacceptance.cybersource.com/silent/pay" method ="post" target="myIframe"> ..... </form>
    <iframe src="" name="myIframe"></iframe>   

【讨论】:

    【解决方案3】:

    当我集成网络源静默后订单时,我遇到了同样的问题。我使用带有隐藏输入字段的表单解决了这个问题,以创建签名和不可见的 iframe 作为我表单的目标。

    在集成网络源静默帖子时需要注意的几件事 1. 确保您通过了所有必填字段 2.生成唯一的应用程序编号和uuid,否则网络来源将其视为重复请求 3.创建签名以确保输入字段不被篡改 4.不要使用ajax提交请求,在这种情况下调用可能会成功,但网络资源不会调用您配置的客户回传URL。

    【讨论】:

      猜你喜欢
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 2019-04-09
      • 1970-01-01
      • 2020-10-01
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多