0

我正在尝试将平衡支付处理合并到我的网站中,但是,他们的解决方案假定正在使用标准 HTML 表单并使用 jQuery 检索它。由于我使用 knockout.js 为我的表单提供动力,因此输入的引用方式不同,这意味着我必须修改我的表单。对于此示例,我手动设置信用卡数据的值,而不是从 $(#credit-card-form)

当我打开网络选项卡检查错误时,它显示“未捕获的类型错误:对象# 的属性 '0' 不是函数”,我认为这是对附加到 creditCardData 的输入属性的引用

这个小提琴是 Balanced 给出的例子来展示它是如何工作的。在 javascript 区域中,您必须创建一个新的请求 bin并将该 bin 复制到代码中。然后,当您更新代码并单击“tokenize”时,访问该请求 bin URL,您将看到请求已提交。

我创建了这个正确标记卡片的小提琴,但是我遇到了错误并且不能完全确定它们来自哪里。请记住,您必须创建自己的requestbin并将该 URL 复制/粘贴到代码中。只是提醒一下,那个“标记化”按钮不会做任何事情。我只是将 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);
4

1 回答 1

1

因为评论有点冗长,所以要回答。

我不再收到权限错误,所以我猜有些东西在工作中被阻止了。

主要区别在于他们提交的是 HTML 表单,而您(尝试)提交的是 javascript 对象。

我很确定你不能调用.submit()任何随机对象。

你需要这样做:

http://jsfiddle.net/sKjPF/2/

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();

让我知道这是否没有帮助。

于 2013-07-13T01:00:06.163 回答