在包含我的订单表单的页面上,在<head>
中,我有:
= jquery_include_tag Rails.application.config.jquery_version
= javascript_include_tag "https://js.stripe.com/v2/"
:javascript
$(function(){
Stripe.setPublishableKey('pk_test_NEgBLhQ1dJGvlE8SDFEXqRQ4');
});
(function() {
var stripeResponseHandler;
$("#new_order").submit(function(event) {
var form;
form = $(this);
form.find("#submit_order").prop("disabled", true);
Stripe.createToken(form, stripeResponseHandler);
return false;
});
stripeResponseHandler = function(status, response) {
var form, token;
form = $("#new_order");
if (response.error) {
form.find(".payment-errors").text(response.error.message);
form.find("#submit_order").prop("disabled", false);
} else {
token = response.id;
form.append($("<input type=\"hidden\" name=\"stripeToken\">").val(token));
form.get(0).submit();
}
};
}).call(this);
您在上面列出的密钥在https://manage.stripe.com/account/apikeys标有“Test Publishable Key”。
该页面上的表格包括:
= simple_form_for @order, :html => {:id => "new_order"} do |f|
= f.error_notification
= text_field_tag :number, nil, :name => nil, "data-stripe" => "number"
= text_field_tag :cvc, nil, :name => nil, "data-stripe" => "cvc"
= text_field_tag :expiry_month, nil, "data-stripe" => "exp-month"
= text_field_tag :expiry_year, "data-stripe" => "exp-year"
= f.button :submit, :as => :button, :id => 'submit_order'
(删除所有标签/占位符/等和非条带字段。)
目前我在localhost上以开发模式运行它,没有任何SSL。
当我使用有效或无效的信用卡数据完成订单并单击创建订单时,我的Rails应用程序会记录订单,但Javascript似乎与Stripe服务器无法通信。在Chrome的Javascript控制台中,我认为没有任何错误 - 或者根据我所知的任何Javascript活动。我在https://manage.stripe.com/test/events看到没有任何指控 - 无论是成功的还是其他指控。
我知道Rails的方式,但我是一个Javascript新手。我如何诊断这里发生了什么?可能是什么原因?
答案 0 :(得分:1)
(function() {
这应该是
$(function() {
(你可以放弃.call(this)
东西)
它正在<head>
中立即执行,这可能意味着$("#new_order")
找不到表单 - 浏览器甚至没有呈现它,或者甚至可能从网络上接收到它的HTML,但是 - 所以选择器匹配零项,事件绑定是无操作。
或者,如果你把代码放在</body>
之前,那也可以做到。
(另外,将Stripe.setPublishableKey()
放在$(function() { … })
块中也没用。)