我正在尝试将平衡支付处理合并到我的网站中,但是,他们的解决方案假设正在使用标准HTML表单并使用jQuery检索它。由于我使用knockout.js为表单提供支持,因此输入的引用方式不同,这意味着我必须修改表单。对于此示例,我手动设置信用卡数据的值,而不是从$(#credit-card-form)
中取出当我打开网络选项卡检查错误时,它显示“Uncaught TypeError:对象#的属性'0'不是一个函数”,我认为这是在引用附加到creditCardData的输入属性
This fiddle是Balanced提供的示例,用于展示其工作原理。在javascript区域中,您必须创建一个新的request bin并将该bin复制到代码中。然后,当您更新代码并单击“tokenize”时,请访问该请求bin URL,您将看到请求已提交。
我创建了this fiddle,它正确地对卡片进行了标记,但是我遇到了错误,无法将其固定到它们来自的位置。请记住,您必须创建自己的requestbin并将该网址复制/粘贴到代码中。只是抬头,“标记化”按钮不会做任何事情。我只是将HTML留在那里,考虑到小提琴打开后立即调用该函数,它实际上没有做任何事情。
我的版本和Balanced之间的主要区别在于对balanced.js函数的初始调用。
//paidForItems is a button set with knockout.js
self.paidForItems = function() {
//responseCallbackHandler here, see fiddle for details
var creditCardData = {
card_number: '4111111111111111',
expiration_month: '01',
expiration_year: '2020',
security_code: '123'
};
balanced.card.create(creditCardData, responseCallbackHandler);
}
在提交表格时,它会平衡吗
//responseCallbackHandler here, see fiddle for details
var tokenizeInstrument = function(e) {
e.preventDefault();
var $form = $('#credit-card-form');
var creditCardData = {
card_number: $form.find('.cc-number').val(),
expiration_month: $form.find('.cc-em').val(),
expiration_year: $form.find('.cc-ey').val(),
security_code: $form.find('cc-csc').val()
};
balanced.card.create(creditCardData, responseCallbackHandler);
};
$('#credit-card-form').submit(tokenizeInstrument);
答案 0 :(得分:1)
由于评论有点冗长,所以要回答。
我不再收到权限错误了,所以我觉得有些东西在工作时被阻止了。
主要区别在于他们正在提交HTML表单并且您正在(尝试)提交javascript对象。
我很确定你无法在任何随机对象上调用.submit()
。
你需要这样做:
case 201:
console.log(response.data);
var cardTokenURI = response.data['uri'];
// append the token as a hidden field to submit to the server
var form = $("#credit-card-form");
$('<input>').attr({
type: 'hidden',
value: cardTokenURI,
name: 'balancedCreditCardURI'
}).appendTo(form);
form.attr({action: requestBinURL});
form.submit();
如果这没有帮助,请告诉我。