1

次のコードがあります。これは、Cardspring サーバーからの応答を受け取り、それをサイトに送信してデータベースに保存しようとします。ajax を正しく動作させるのに問題があります。heroku サーバーのログを見ると、ajax がサーバーに POST を送信していないようです。ajax リクエストのログ エントリがありません。ajax コードは次のようになります。

  <script type="text/javascript">
    $(document).ready(function()
     {
        $('#contactform').submit(function(event) {
            $('.submit-button').attr('disabled', 'disabled');
            cardSpringResponseHandler = function(response){
                if((typeof response.error) != "undefined")
                {
                    var error = response.error;
                    var reason = response.reason;
                    alert(error + '    ' + reason);
                }

                else
                {
                    alert(response.token + '    ' + response.last4 + '   '+ response.brand + '    ' + response.brand_string + '    ' + response.expiration);
                    alert('Thank you, your card is registered!');
                    $.ajax({
                        type: 'POST',
                        url:'www.url.com/me',
                        async: false,
                        data: {"token": response.token,"last4": repsonse.last4,"brand": response.brand,"brand_string":response.brand_string,"expiration": response.expiration}.serialize(),

                         error: function () {
                                alert('Error');
                             }
                    });

                }

                alert('Hello 2');
            };
            alert('adding card');
            CardSpring.addCard(cardSpringResponseHandler
            , {
                publisher_id : '{{ CARDSPRING_APP_ID }}',
                security_token : '{{ securityToken }}',
                timestamp : '{{ timestamp }}',
                hmac : '{{ digestedHash }}'
            }, {
                card_number : $('.card-number').val(),
                exp_month : $('.expiration-month').val(),
                exp_year : $('.expiration-year').val(),
                user_id : '{{ csid }}'
            }, "all");
            alert('card added');
            return false;
        });
    });
</script>  

URL を表示するための urls.py のスニペットを次に示します。

url(r'^me/$', accountInfo),

django ビューとして、サーバー側のコードは次のようになります。

def accountInfo(request):
    #after CS.addCard is sucessful, this adds the credit card Token to our DB...
    print request.method
    if request.method == "POST":
        print "in account info"
        print "expiration = " ,
        #print request.POST['expiration']
        print "request ="
        print request
        try:
            cardToAdd = Cards(csID = request.COOKIES.get('csID'),token = request.POST['token'], last4 = request.POST['last4'], cardType = request.POST["brand"] ,typeString = request.POST['brand_string'],
            expDate = request.POST['expiration'])
            cardToAdd.save();
            json_data = json.dumps({"HTTPRESPONSE":"sucess"})
            return HttpResponse(json_data, mimetype="application/json") 

        except:
            json_data = json.dumps({"HTTPRESPONSE":"fail"})
            return HttpResponse(json_data, mimetype="application/json")

最初の印刷 request.method は、メソッド = GET を使用して、ページの最初の読み込み時に実行されます。サーバーは他のリクエストを出力しないため、ajax コードが実行されていないと思われます

アラート (少なくとも一部) は発生します。それらは常に次の順序で発生します。

  • カードの追加
  • カードが追加されました
  • response.token、response.last4など
  • ありがとう、あなたのカードが追加されました

何が起こっているのか誰にも分かりませんか?助けてくれてありがとう - 私は ajax と javascript に非常に慣れていません

4

0 に答える 0