Django& ajax:控制数据'由Ajax查询返回

时间:2018-03-30 11:37:11

标签: javascript ajax django

我有两个字段,具体取决于字段。 到目前为止,我可以使一个字段依赖,但不是两个,因为我不知道如何控制Ajax的数据变量。

 $("#id_type1").change(function () {
  var url = $("#personForm").attr("data-tiers-url");  // get the url of the `load_cities` view
  var typeID = $(this).val();  // get the selected country ID from the HTML input
//  alert(countryId)
  $.ajax({                       // initialize an AJAX request
    url: url,                    // set the url of the request (= localhost:8000/hr/ajax/load-cities/)
    data: {
      'tiers': typeID       // add the country id to the GET parameters
    },
    success: function (data) {   // `data` is the return of the `load_cities` view function
      alert(data)
      $("#id_tiers").html(data);
      // replace the contents of the city input with the data that came from the server
    }
  });
});

这是返回包含树变量的数据的视图:

def load_tiers(request):
    tiers_id = request.GET.get('tiers')
    print(tiers_id)
    tiers = operation_Bancaire.objects.all().filter(type_tiers=tiers_id)
    #print(cities)
    frs="Fournisseur";
    clt="1";
    if tiers_id=="Fournisseur":
        frs = operation_Bancaire.objects.all().filter(type_tiers=tiers_id)
    elif tiers_id=="client":
        clt = operation_Bancaire.objects.all().filter(type_tiers=tiers_id)
    return render(request, 'appOne/city_dropdown_list_options.html', {'tiers': tiers,'frs':frs,'clt':clt})

我需要控制此data$("#id_tiers").html(data);,以#id_tiersdata['frs'],而不是'tiers','frs','clt'

这包含数据:

enter image description here

你可以帮助我实现这个目标,因为我是Ajax的新手,也是js的新手。

1 个答案:

答案 0 :(得分:0)

我可以建议您更改Python端点或创建新端点,这样您只需将JSON返回给您的AJAX调用吗?与以JSON发送响应相比,解析HTML以获得所需的值更加困难。

def load_tiers_json(request):
    tiers_id = request.GET.get('tiers')
    tiers = operation_Bancaire.objects.all().filter(type_tiers=tiers_id)
    frs="Fournisseur";
    clt="1";
    if tiers_id=="Fournisseur":
        frs = operation_Bancaire.objects.all().filter(type_tiers=tiers_id)
    elif tiers_id=="client":
        clt = operation_Bancaire.objects.all().filter(type_tiers=tiers_id)
    return JsonResponse({'tiers': tiers,'frs':frs,'clt':clt})

然后在您的AJAX调用中,从返回的data

中获取所需的密钥
$("#id_type1").change(function () {
  var url = $("#personForm").attr("data-tiers-url");  // get the url of the `load_cities` view
  var typeID = $(this).val();  
  $.ajax({                       
    url: url,                    
    data: {
      'tiers': typeID     
    },
    success: function (data) {   
      $("#id_tiers").html(data.frs);
    }
  });
});

当然,您需要更改Django urls.py以公开此新端点,并更改JavaScript调用中的url值以使用新端点。