ajax - AJAX 调用后的渲染问题

标签 ajax redirect browser

我正在使用 Bottle 微框架(但我怀疑我的问题来自它)

首先,如果我定义了一个从/test_redirect 到/x 的简单重定向,它会起作用。所以 Bottle redirect() 在简单的情况下是有效的。

现在我有一个页面/buy 使用 Stripe Checkout(自定义表单)指向我的服务器/stripe_process
基本上,Stripe Checkout 验证信用卡交易,创建 token 并将其发布到我的/stripe_process。

/stripe_process 完成它的工作(调用 Stripe 对卡收费)然后当交易成功时,我使用指示 Bottle:

redirect('/transaction_summary')

我的网络服务器日志显示确实调用了/transaction_summary 并处理了服务器端脚本(我在脚本中放置了标志来检查这一点),并返回其模板(浏览器“网络”分析在/transaction_summary 上给出 303,然后给出 200,我什至得到了正确的响应数据:似乎 100% 正常),但在浏览器页面上没有任何 react (我的初始页面/buy 在 url 字段中,而不是被重定向到/transaction_summary):浏览器收到/transaction_summary 响应,在 Chrome devtools 预览模式下可以看到预览,但没有显示它!

此外,如果在/stripe_process 中,我使用简单的返回模板()更改了重定向(),同样的问题:浏览器不处理任何数据。

任何线索?在我的测试中 100% 观察到了这种行为:
- 火狐/视窗
- Chrome/iOS 9 (iPad)
- Chrome /Linux
- Iceweasel/linux
- Chrome /安卓
- Chrome /OSX

我怀疑这与 Stripe Checkout 接管某些东西有关(因为 redirect() 在我的简单测试中完美运行),但我无法弄清楚原因以及如何解决这个问题。

如果从 Chrome-devtools-network 部分转到最后一个操作(即/transaction_summary 下载)并在新选项卡中打开/transaction_summary,它将完美呈现。
所以这不是瓶子问题,也不是网络服务器。我怀疑更多关于条纹结帐模式/弹出行为

$(window).on('popstate', function() { handler.close(); });作为条纹文档指示存在,但无论如何,在收到 token 后,stripe_handler 已正确关闭(我使用 handler.closed 回调进行了检查...)

编辑:
如果我用直接返回模板()替换重定向(),同样的问题:浏览器下载 html 内容,在预览时可用,但不在主窗口上呈现。

编辑2:
如果我在我的页面上添加一个 href 到/test_redirect 重定向到/x 它可以工作。
请注意,此手动重定向在 Stripe 结帐后起作用。这里与 Stripe 序列的唯一区别是用户交互(“点击”href),但由于我的重定向是同一个域,浏览器无论如何都不应该阻止重定向。

最佳答案

问题是用于将 Stripe token 发送到/stripe_process 的 AJAX 调用正在处理重定向响应。这就是为什么在网络上我有 200 个来自网络服务器的答案,但所有 html 页面数据都进入了 AJAX 回调并呈现。感谢托马斯让我对这​​个问题嗤之以鼻。

解决方案是/stripe_process 在成功的情况下返回 1(而不是服务器端重定向),然后从 AJAX 成功回调进行重定向。

关于ajax - AJAX 调用后的渲染问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33499076/

相关文章:

ajax - 如何更新EJS模板+AJAX?

apache - htaccess rewriteCond 使用自定义 http header

javascript - 缓存javascript文件的基础是什么?

.net - 为什么 HttpWebRequest 和 WebBrowser 获得不同的 HTML 源代码?

windows - WSL (Ubuntu) : how to open localhost in browser from bash terminal

javascript - 语法错误 : unexpected token <

php - 使用 Ajax 时 jQuery 的奇怪问题

javascript - 如何使用 jQuery 异步加载图像,以及如何知道图像加载何时完成?

.htaccess - 如果 url 不包含特定目录,则 htaccess 重定向

BASH 脚本将 stdin 输入传递给程序并将控制权交还给用户输入