【问题标题】:ajax conflict when trying to integrate paypal尝试集成贝宝时的ajax冲突
【发布时间】:2019-02-10 00:33:05
【问题描述】:

我正在尝试集成 paypal 支付,但我遇到了一个问题,因为我使用 ajax 将购物车数据发送到创建订单。它向我显示此警报:无法加载https://linktothepaypallogin 对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许访问 Origin 'http://localhost'。

创建订单php:

<?php

session_start();

 if(isset($_SESSION['pay']) && $_SESSION['pay']=="Paypal"){
unset($_SESSION['pay']);
    header("location:PayPal-PHP-SDK/paypal/rest-api-sdk-php/sample/payments/AuthorizePaymentUsingPayPal.php");
    exit();
}

?>

JS:

function validate_order(){
$.ajax({
 url: "create_order.php",
});
}

我确定问题出在 ajax,因为如果我尝试提交,它会按预期工作。

【问题讨论】:

  • 看起来您正试图在浏览器上的 XMLHttpRequest 中访问“linktothepaypallogin”,并且由于请求的类型,浏览器执行 CORS 预检,但失败了......您显示的代码会导致该错误
  • 是的,我不知道如何让浏览器正确地将我重定向到 paypal 链接,而不是向我显示该错误。
  • 不要将 XHR 用于其他域不允许的跨源请求 - 问题中的代码 与您的错误无关 - 所以,这很难真正帮助完全
  • 好吧,我认为这是 ajax 的问题,因为如果我使用输入提交到同一个 create.php,它就可以正常工作。
  • 您在问题中显示的 Ajax 是同源的,因此不会导致跨源错误。等一下。我现在明白了。您正在将请求重定向到不同的主机。很抱歉造成混乱。

标签: javascript php ajax


【解决方案1】:

create_order.php 应该是

    <?php 
    session_start();

     if(isset($_SESSION['pay']) && $_SESSION['pay']=="Paypal"){
        unset($_SESSION['pay']);
        echo "PayPal-PHP-SDK/paypal/rest-api-sdk-php/sample/payments/AuthorizePaymentUsingPayPal.php";           
      }

    ?>

而JS页面应该是

function validate_order(){
 $.POST("create_order.php",false,function(e){
    window.location.href = e;
 });
}

【讨论】:

  • 很抱歉,这是一个愚蠢的问题,但我应该用 $.ajax 替换 $.POST 吗?在任何情况下,如果我完全按照您编写的方式复制和粘贴 JS 代码,它会向我显示以下错误:$.POST 不是函数,但如果我将其替换为 $.ajax,则它已被弃用。我真的很抱歉,但我是 JS 的菜鸟,
  • 两者都可以使用。这是你的选择。 $.post("create_order.php", function(url) { window.location.href = url; });
猜你喜欢
  • 2014-07-03
  • 2011-08-01
  • 2011-11-03
  • 2016-08-18
  • 2013-05-13
  • 2011-05-24
  • 2013-07-10
  • 2015-09-08
  • 2012-10-05
相关资源
最近更新 更多