2011-06-24 17 views
5

Tôi đang trở về này theo quan điểm của tôi:làm thế nào để trả lại một từ điển trong python django và xem nó trong javascript?

data = {'val1' : 'this is x', 'val2' : True} 
    return HttpResponse(data) 

Tôi muốn sử dụng thông tin này trong từ điển trong javascript của tôi. Loại như thế này:

  function(data) { 
       if (data["val2"]) { 
        //success 
        alert(data["val1"]); 
       } 
      } 

Tuy nhiên javascript của tôi không hoạt động. Không có cảnh báo xuất hiện và tôi biết rằng từ điển có thông tin khi nó rời khỏi chế độ xem python của tôi.

Tôi có thể đọc thông tin này trong JS của mình bằng cách nào?


Ok vì vậy, câu trả lời cho chế độ xem là simplejson.dumps (dữ liệu). Bây giờ khi tôi thực hiện một cảnh báo (dữ liệu) trong JS của tôi trên mẫu của tôi, tôi nhận được {'val1': 'đây là x', 'val2': True}. Bây giờ làm thế nào tôi có thể quản lý phần 2 của câu hỏi đó được đọc ra các giá trị như

 function(data) { 
      if (data["val2"]) { 
       //success 
       alert(data["val1"]); 
      } 
     } 

UPDATE: Các simplejson.dumps (dữ liệu) chuyển đổi từ điển thứ vào chuỗi. Vì vậy, trong javascript bạn cần phải chuyển đổi chuỗi thành một đối tượng. Đây là cách dễ nhất nhưng dường như không an toàn.

var myObject = eval('(' + myJSONtext + ')'); 
+1

thể trùng lặp của [Đi qua Python dữ liệu để hoạt Javascript qua Django] (http : //stackoverflow.com/questions/1445989/passing-python-data-to-javascript-via-django) –

+1

Ngay cả khi bạn sử dụng Ajax, câu trả lời trong câu hỏi trên sẽ giúp bạn. –

+0

Bạn có đang sử dụng AJAX (XmlHttpRequest) để thực hiện yêu cầu không? –

Trả lời

11

Rất đơn giản:

import json 
data = {'val1' : 'this is x', 'val2' : True} 
return HttpResponse(json.dumps(data)) 
+0

ok tôi có điều này trở lại trong JS {'val1': 'đây là x', 'val2': True}. Bây giờ làm thế nào tôi có thể truy cập chỉ các giá trị cụ thể. Giống như val1? như dữ liệu này ["val1"]? Tôi nhận được một không xác định khi tôi cố gắng cảnh báo (dữ liệu ["val1"]); – darren

+0

bạn đã thử data.val1 chưa? –

+0

Có nó vẫn cung cấp cho undefined: ( – Sohaib

6

JSON là cách dễ nhất để truyền dữ liệu (bạn cũng có thể sử dụng XML).

Trong python:

 
    import json 
    data = {'val1': "this is x", 'val2': True} 
    return HttpResponse(json.dumps(data)) 

Trong javascript:

 
    function (data) { 
     data = JSON.parse(data); 
     if (data["val2"]) { 
      alert(data["val1"]); 
     } 
    } 
+0

Đây là câu trả lời đúng, hoặc thay vì xác định mimetype như trong câu trả lời của Shwetabh Sharan dưới đây – mpaf

1

Chỉ cần xác định Mimetype trong HttpResponse

return HttpResponse(
         json.dumps({"status":False, "message":"Please enter a report name."}) , 
         mimetype="application/json" 
         ) 
+0

Đây là một trong những câu trả lời đúng – mpaf

+1

Kể từ Django 1.9, 'mimetype' đã được thay thế bằng' content_type ' – cs01

Các vấn đề liên quan