2017-04-08 272 views
-1

我想訪問ajax代碼中的django對象。但我無法訪問它。請指導我。如何訪問ajax中的django對象

my server code

def attendance_table(request): 
    if request.is_ajax(): 
     try: 
      CollegeCode = request.session.get('collegeCode') 
      academicyear = logic.academicYearCal() 
      eventquery = "SELECT e.EventId , e.EventLocation,e. EventStartDate,e.EventEndDate,e.EventHours,em.EventCode as EC ,em.EventName from Events " 
      events = models.Events.objects.raw(eventquery, [academicyear, '1', CollegeCode]) 

      context = {} 
      events = serializers.serialize('json', events) 
      context['events'] = events 

      return JsonResponse(data=context) 

     except Exception as e: 
      return JsonResponse(data={'error':'error'}) 


Ajax Code

$.ajax({ 
     url:url, 
     type:'GET', 
     dataType:'JSON', 
     success:function(response) { 
      console.log(response.events); 
     } 
    }); 


在瀏覽器控制檯輸出

[{"model": "sample.events", "pk": "E22", "fields": {"eventcode": "1", "collegecode": "KIT", "eventopenflag": "1", "eventstartdate": "2017-07-23", "eventenddate": "2017-07-22", "eventlocation": "Shivaji memorials , kolhapur", "academicyear": "2017", "eventlevel": 5, "eventhours": 0}}] 

指正,請..

+0

'response.events'是一個帶有JS對象的JS數組。你想要訪問什麼? –

+0

**「fields」中的所有內容:{「eventcode」:「1」,「collegecode」:「KIT」,「eventopenflag」:「1」,「eventstartdate」:「2017-07-23」,「eventenddate」: 「2017-07-22」,「eventlocation」:「Shivaji memorials,kolhapur」,「academicyear」:「2017」,「eventlevel」:5,「eventhours」:0} ** – deepak

回答

0

您可以access a javascript object類似於Python字典。

因爲你要返回一個數組,所以你必須先對它進行迭代。假設你命名你的返回數組作爲response.events,則:

success:function(response) { 
    // convert String to JSON object (JS object) 
    var events = JSON.parse(response.events); // events should be an Array (console.log(events instanceof Array) should yield True) 
    for (var i=0; i<events.length; i++) { 
     // now each events[i] has an object within it 
     var obj = events[i]; // obj is an alias for each object in the array 
     // Now you can access each key-value pair like this 
     var fields = obj.fields; // an alias again 
     var eventcode = fields.eventcode; // or fields['eventcode'] 
     var collegecode = fields.collegecode; 
     // etc. 
    } 

請注意,如果您的數組總是要包括一個對象,那麼你並不需要一個for循環。只需像下面這樣獲取對象:

success:function(response) { 
    var events = JSON.parse(response.events); 
    var obj = events[0]; 
    var fields = obj.fields; 
    ... 
} 
+0

** var obj = response.events [我]; **與此我只得到** [**作爲輸出和休息都是未定義的。爲什麼這樣 ?它沒有正確序列化? – deepak

+0

'console.log(response.events);'inside'success'是否打印出[{「model」:.....}]? –

+0

是.. :-(。它打印的是[{「model」:....}] – deepak