我正在构建一个使用 Google Wallet In App Payments 的应用程序。它托管在 python 环境中的谷歌应用引擎上。
作为钱包交易的一部分,需要生成 jwt,我通过获取客户端数据,通过 ajax GET 请求将其发送到服务器端以生成 jwt,然后在服务器响应中捕获它来做到这一点。我的代码在我的本地开发环境中按预期工作(在 chrome 隐身模式下运行以避免缓存问题)。但是,当我实时推送应用程序并发出请求时,什么都没有返回,python 方法也没有运行。
Appengine 日志确实显示该请求正在被看到 - 它只是没有被采取行动。
2013-06-18 21:35:01.919 /payments/generate_jwt_token?topup_amount=1&user_token=108700000000000000889 302 51ms 0kb Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36
86.1.75.123 - someuser [18/Jun/2013:14:35:01 -0700] "GET /payments/generate_jwt_token?topup_amount=1&user_token=108700000000000000889 HTTP/1.1" 302 0 "http://myapp.appspot.com/me/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36" "myapp.appspot.com" ms=52 cpu_ms=0 app_engine_release=1.8.1
如果我使用邮递员发出相同的请求(从我的 chrome 浏览器),即我发送一个 GET 请求到
http://myapp.appspot.com/payments/generate_jwt_token?topup_amount=1&user_token=108700000000000000889
我确实得到了预期的响应(就像我在本地开发环境中所做的那样)。我在应用引擎上只有 1 个版本的应用。
我尝试将请求更改为 POST 请求,但遇到了同样的问题 - 它应该会引发错误。
ajax请求如下:
function get_jwt_token_for_user(topup_amount, callback)
{
console.log("get_jwt_token is running"); // this is printed to console
$.ajax({
type: "GET",
url: "/payments/generate_jwt_token",
data: {"topup_amount" : topup_amount, "user_token" : "108700000000000000889"},
success: function(result) {
var myObject = JSON.parse(result);
console.log("myObject"); // none of this is printed when on appengine, but it is when running locally
console.log(myObject); // none of this is printed when on appengine, but it is when running locally
if (myObject.jwt_token !== 'None')
{
callback(myObject.jwt_token);
}
else
{
console.log(myObject.error);
}
},
failure: function(fail){
console.log("fail");
console.log(fail);
}
});
}
尽管所有的 console.log(s) 都没有在 ajax 请求中写入控制台。但是,该功能确实运行,因为我可以看到第一个 console.log 打印到屏幕上。
我的问题是:
- 这是一个 appengine 错误/功能,如果是,我该如何解决?
- 我是否滥用了 JQuery ajax,如果是这样,该怎么办?
- 为什么这些代码都可以在本地工作,但在实时推送时却不行。