使用knockout.js和CakePHP失败的GET请求

时间:2013-07-09 19:25:00

标签: php jquery cakephp paypal

我将paypal纳入我的网站,然而,一旦我收到令牌并尝试重定向到paypal的网站,没有任何反应。我在我的前端使用knockout.js。当我单击一个按钮发出GET请求时,这些值将被发送到相应的CakePHP操作,该操作将验证数据,然后重定向到paypal的站点以完成交易。

现在这是奇怪的部分。起初我假设我搞砸了jQuery来制作GET,但事实并非如此。当我使用相应操作中包含的标题('location ...')代码发出GET请求时,网络选项卡显示请求失败为“已取消”。但是,当我注释掉标题('location ..')代码时,请求会成功通过。

这是GET请求

//order_processing.js

$.getJSON("/orders/pay_for_order/" + itemNumbers + "/" + quantities + "/" + prices + "/" + productNames + "/" + self.fullName() + "/" + self.addressLine1() + " " + self.addressLine2() + "/" + self.city() + "/" + self.state() + "/" + self.ZIP() + "/" + self.email(),function(data) {

});

以下是请求转到的操作

//OrdersController

function pay_for_order($id = null){
     //processing code here
     //get token from paypal

    if($finalize_order->verifyPrice($item_numbers, $prices) == TRUE){  
        //when I comment out this header redirect the GET request is successful, but of course then does not redirect
        header( 'Location: https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token='.$token ) ;  
    }
}

我知道我对paypal的调用正常工作以获取令牌,因为当我将链接复制/粘贴到地址栏时,它会重定向(意味着令牌已成功接收)。这对我来说似乎是jQuery提出请求的问题。但是,我很困惑为什么GET请求在包含头部重定向时失败,但是当它被注释掉GET传递时。

更新

我换了以下的标题重定向并且它没有失败,但是,它也没有重定向。此代码也显示在响应中,所以我认为这可能意味着CakePHP不喜欢标题('location')重定向。

echo '<META HTTP-EQUIV="Refresh" Content="0; URL=https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token='.$token.'">';    

1 个答案:

答案 0 :(得分:1)

getJson期待json

$.getJSON是一个请求json的方法,它不适合发出预期返回not-json的请求。

此外,如果响应仅发出重定向标头,则(子)请求将被重定向,而不是发出(xhr)请求的页面。

使用javascript重定向

给出示例代码,实现所需结果的一种方法是修改返回有效json的请求:

{
    "success": true,
    "url": "https://www.sandbox..."
}

然后使用适当的成功处理程序:

$.getJSON(url, function(data) {
    if (data.success) {
        document.location = data.url;
    }
});