2013-07-12 4 views
0

균형 결제 처리를 내 사이트에 통합하려고하지만 솔루션에서 표준 HTML 양식이 사용되고 있다고 가정하고 jQuery로 검색합니다. 내 양식에 힘을주기 위해 knockout.js를 사용하기 때문에 양식이 다르게 참조되어 양식을 수정해야합니다. 이 예에서는 신용 카드 데이터의 값을 $ (# 신용 카드 양식)에서 가져 오는 대신 수동으로 설정합니다.jQuery를 사용하여 변수/객체에 입력 속성 추가

오류를 확인하기 위해 네트워크 탭을 열면 "Uncaught TypeError : 속성 0 '개체의 함수가 아닙니다 "나는 creditCardData에 추가되는 입력 특성에 대한 참조입니다.

This fiddle은 어떻게 작동하는지 보여주는 예제입니다. javascript 영역에서 새로운 request bin을 만들고 그 bin을 코드에 복사해야합니다. 그런 다음 코드를 업데이트하고 "토큰 화"를 클릭하면 요청 빈 URL을 방문하면 요청이 제출 된 것을 볼 수 있습니다.

카드를 올바르게 토큰화한 this fiddle을 만들었지 만 오류가 발생하여 어디서 왔는지 정확하게 파악할 수 없습니다. 자신의 requestbin을 만들고 해당 URL을 코드에 복사/붙여 넣기해야합니다. 머리를 위로하면 "토큰 화"버튼이 아무 것도하지 않을 것입니다. 방금 HTML을 남겨 두었습니다. 바이올린이 열리 자마자 함수가 호출되는 것을 고려하면 아무 것도하지 않습니다.

내 버전과 균형 조정의 주된 차이점은 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

열기 또는 pageload에서 실행 중이십니까? JQuery는 실제로 이와 같은 작업을 위해 페이지로드를 기다리고 싶어합니다. –

+0

.val()과 문자열 값을 하드 코딩하는 것 사이에는 아무런 차이가 없습니다. 다른 생각이 들었습니다. –

+0

@BenBarden 저는 여러분이 무슨 뜻인지 잘 모르겠습니다. 나는 당신이 뭔가 다른 것을 언급하지 않는 한 함수가 꽤 명확하게 호출되는 방법을 설명한다고 생각했다. – user1406951

답변

1

를 제출하기에 그것을 않습니다.

권한 오류가 더 이상 표시되지 않으므로 회사에서 뭔가 차단 된 것 같습니다.

가장 큰 차이점은 HTML 양식을 제출하고 있으며 자바 스크립트 개체를 제출하려고한다는 것입니다.

임의의 개체에 .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(); 

가 밖으로 도움이되지 않는 경우 알려주세요.

+0

정말 고마워요. 그래도 한 가지 질문이 있습니다. knockout.js를 사용하고 jQuery가 아니라 폼 입력을 얻는 것을 고려할 때, 항상 나를 위해 null이되지는 않을까요? 이것은 분명히 작동하지만 실제로 설정되지 않기 때문에 "var form"의 값이 어떻게되는지 혼란 스럽습니다. – user1406951

+0

녹아웃을 사용하는 양식이 있어야합니다. 최악의 경우에 DOM에 양식을 동적으로 삽입 한 다음 제출하십시오. –

+0

녹아웃이있는 양식이있는 동안 양식 이름을 명시 적으로 선언하지 않도록 양식을 마스크합니다. 적어도 알고 있습니다. 예를 들어, 주어진 입력은 값을 바인딩하고 나머지는 knockout을 수행합니다. 동적으로 양식을 삽입한다고 할 때, 그냥 "가짜"양식을 만들고 그것에 아무 것도 지정하지 않습니까? – user1406951

관련 문제