Ajax发布到其他域名网址,重定向到其他网址

时间:2016-03-11 14:57:03

标签: javascript

我应该使用他们的无声订单帖子呼叫第三方供应商 - 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期望在同一个域上响应"称为webservice",即我的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>

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:

function myFunction() { //document.getElementById("myForm1").submit(); var http= new XMLHttpRequest(); var url = "https://testsecureacceptance.cybersource.com/silent/pay"; var params = document.getElementById("queryStr"); var jqxhr = $.post( url, function() { alert( "success" ); }) .done(function() { alert( "second success" ); }) .fail(function() { alert( "error" ); }) .always(function() { alert( "finished" ); }); // Set another completion function for the request above jqxhr.always(function() { alert( "second finished" ); }); } 任何解决方案?

3 个答案:

答案 0 :(得分:0)

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()将您的请求发送到服务器。

问候

答案 1 :(得分:0)

我找到了出路。在我的表单上我添加了一个iframe,现在当我收到来自CS的帖子回复时,我的页面没有重新加载,而是在iframe中更新了响应。

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

答案 2 :(得分:0)

当我整合网络源无声后订单时,我遇到了同样的问题。我用带有隐藏输入字段的表单解决了它,以创建签名和不可见的iframe作为我的表单的目标。

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

相关问题