【问题标题】:How to pass data from ajax to django view?如何将数据从 ajax 传递到 django 视图?
【发布时间】:2021-03-26 07:17:01
【问题描述】:

我有以下 ajax 脚本。这将获取公钥并将所有其他详细信息发送到 Stripe 服务器进行付款,但我需要将价格的动态值发送到 item_line。

fetch("/config/")
.then((result) => { return result.json();})
.then((data) => {
  // Initialize Stripe.js
  var data1 = $('#priceId').html();


  const stripe = Stripe(data.publicKey);
  // Event handler
  let submitBtn = document.querySelector("#submitBtn");
  if (submitBtn !== null) {
    submitBtn.addEventListener("click", () => {
      var d = $('#priceId').html();
      console.log(d) // this value need to send to my view...
      
    fetch("/create-checkout-session/")
      .then((result) => { 
        return result.json();
       })
      .then((data) => {
        // Redirect to Stripe Checkout
        return stripe.redirectToCheckout({sessionId: data.sessionId})
      })
      .then((res) => {
        console.log(res);
      });
    });
  }
});

如何通过以及如何在视图文件中捕获? 我目前的看法是:


@csrf_exempt
def create_checkout_session(request):
    if request.method == 'GET':
        domain_url = 'http://localhost:8000/'
        stripe.api_key = settings.STRIPE_SECRET_KEY
        try:
            checkout_session = stripe.checkout.Session.create(
                client_reference_id=request.user.id if request.user.is_authenticated else None,
                success_url=domain_url + 'success?session_id={CHECKOUT_SESSION_ID}',
                cancel_url=domain_url + 'cancel/',
                payment_method_types=['card'],
                mode='subscription',
                line_items=[
                    {
                        'price': settings.STRIPE_PRICE_ID, # here need dynamic selected value
                        'quantity': 1,
                    }
                ]
            )
            return JsonResponse({'sessionId': checkout_session['id']})
        except Exception as e:
            return JsonResponse({'error': str(e)})


请帮帮我。

【问题讨论】:

    标签: javascript python jquery django ajax


    【解决方案1】:

    方法很多,我举个简单的例子:

    script.js

    // wrap request in a function:
    function send_data() {
      
      $.ajax({
        url : 'the_url',
        data : {
          'csrfmiddlewaretoken' : '<the-token>',
          'key1' : 'val1',
        },
        method : 'POST',
        success : success_function // reference to below
      });
    
    }
    
    // trigger send_data on some event:
    $('<the-selector').on('<some-event>', {}, send_data);
    
    // i.e. send data on button click:
    $('#button-id').on('click', {}, send_data);
    
    // success function:
    function success_function(response) {
    
      // unpack response:
      val2 = response.key2;
    
      // do some logic:
      ...
    
    }
    

    views.py

    def my_view_function(request):
    
        # unpack request from front end:
        val1 = request.POST['key1']
    
        # do some logic:
        ...
    
        # pack response:
        response = {
            'key2' : 'val2',
        }
    
        return JsonResponse(response)
    

    【讨论】:

    • 我尝试了这个,但出现错误,例如:ajax is not function.
    • 你需要正确导入jquery - 你可以像这样使用cdn:&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"&gt;&lt;/script&gt;
    • 我在其中添加了 $.ajax({...})。内部获取结果等。我的js很差。
    • 您可以将其包装为一个函数,并让不同的事件触发它 - 请参阅我的答案。
    猜你喜欢
    • 2021-09-13
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    相关资源
    最近更新 更多