次のコードがあります。これは、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 に非常に慣れていません