在 Stripe Checkout 关闭回调中是否有任何方法可以确定它是如何被触发的?
例如,我有以下代码,当有人点击结帐按钮时会触发该代码:
// fade in our loading screen
$("#loading-screen").stop(true,true).fadeIn(200);
var handler = StripeCheckout.configure({
key: STRIPE_PUBLISHABLE_KEY,
image: STRIPE_ICON,
closed: function () {
// if user clicks close button, also hide the loading screen
$("#loading-screen").stop(true,true).fadeOut(200);
},
token: function(token) {
// post payment info back to the server via ajax
var data = {
action : 'checkout',
paymentToken: token.id
};
$.post(
ajaxurl,
data,
function (response) {
// after response from server, fade out loading screen and update page or trigger error
$("#loading-screen").stop(true,true).fadeOut(200);
if (response.success) {
$("#checkout-form").html(response.output);
} else {
alert("unknown error. try again later.");
}
},
"json"
);
}
这里的想法是当我点击支付窗口上的关闭按钮时,或者一旦我从我的服务器得到某种响应,加载屏幕就会消失。
但是,closed 回调似乎不仅在有人点击关闭按钮时触发,而且在 Stripe 的付款成功完成之后,但在我的 ajax 调用完成之前。
因此,加载屏幕在操作完成之前被移除,这让用户感到困惑。显然可以做一些事情来优化服务器端的慢速命令,但我也想尝试在客户端修复这个问题。
所以基本上,我需要找到一种方法来区分通过取消按钮关闭和通过成功付款关闭,不幸的是 Stripe Checkout Documentation没有提供有关该过程的大量详细信息。
有什么建议吗?
更新:
我想我可能已经找到了一种方法,但这取决于 token 回调总是发生在关闭回调之前。
基本上我只是设置了一个标志,指示 token 回调是否被触发。
var token_triggered = false;
// fade in our loading screen
$("#loading-screen").stop(true,true).fadeIn(200);
var handler = StripeCheckout.configure({
key: STRIPE_PUBLISHABLE_KEY,
image: STRIPE_ICON,
closed: function () {
// if user clicks close button, also hide the loading screen
if (!token_triggered) {
$("#loading-screen").stop(true,true).fadeOut(200);
}
},
token: function(token) {
token_triggered = true;
// post payment info back to the server via ajax
var data = {
action : 'checkout',
paymentToken: token.id
};
$.post(
ajaxurl,
data,
function (response) {
// after response from server, fade out loading screen and update page or trigger error
$("#loading-screen").stop(true,true).fadeOut(200);
if (response.success) {
$("#checkout-form").html(response.output);
} else {
alert("unknown error. try again later.");
}
},
"json"
);
}
在我做过的几次测试中,它似乎工作正常,但是有人知道是否有任何保证 token 在关闭前总是会触发吗?
更新 #2:
在 freenode 上的#stripe channel 询问后,我被告知 as of April 6, it appears Stripe has ensured that token always will fire prior to closed.
所以我相信这解决了我的问题并允许我区分这两个事件。
最佳答案
正如我在上面的更新中指出的那样,自 2015 年 4 月 6 日起, token 回调应始终在关闭回调之前触发。这意味着我们可以设置一个标志来指示 token 回调是否曾经被触发,从而使我们能够区分事件。
var token_triggered = false;
var handler = StripeCheckout.configure({
...
closed: function() {
if (!token_triggered) {
// close button click behavior goes here
} else {
// payment completion behavior goes here
}
},
token: function(token) {
token_triggered = true;
}
...
});
关于javascript - 带有加载屏幕的 Stripe Checkout API 上的模糊关闭回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30873548/
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende
我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问
我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新rubygems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser
我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que
我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co
下面的代码在我第一次运行它时就可以正常工作:require'rubygems'require'spreadsheet'book=Spreadsheet.open'/Users/me/myruby/Mywks.xls'sheet=book.worksheet0row=sheet.row(1)putsrow[1]book.write'/Users/me/myruby/Mywks.xls'当我再次运行它时,我会收到更多消息,例如:/Library/Ruby/Gems/1.8/gems/spreadsheet-0.6.5.9/lib/spreadsheet/excel/reader.rb:11
相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声