2013-02-26 42 views
13

Tôi có một cấu trúc dữ liệu như thế này:Cách đăng cấu trúc dữ liệu như json vào bình?

enter image description here

Tôi đang cố gắng gửi đến máy chủ bằng cách $ .ajax:

$.ajax({ 
    type: 'POST', 
    data: post_obj, //this is my json data 
    dataType: 'json', 
    url: '', 
    success: function(e){ 
     console.log(e); 
    } 
}); 

và tôi muốn có được nó trong máy chủ bằng cách bình: title = request.form['title'] hoạt động tốt!

Nhưng làm cách nào để nhận được content?

request.form.getlist('content') không hoạt động.

Đây là dữ liệu bài trong firebug:

enter image description here

Cảm ơn rất nhiều: D

+0

Làm thế nào về 'content = Request.Form [ 'content' ]? :) – favoretti

+0

@favoretti không thể hoạt động: 'BadValueException: Giá trị không hợp lệ đối với trường loại" nội dung ". Lý do: "Giá trị không phải là một thể hiện của (got: list)" ' – Robin

+0

Ok, và' return.getlist ('content') 'trả về là gì? Thông tin chi tiết hơn một chút về 'không phải là công việc' có thể hữu ích. Không có bình nào tiện dụng ở đây để kiểm tra không may. – favoretti

Trả lời

16

Bạn đang gửi dữ liệu được mã hóa dưới dạng chuỗi truy vấn thay vì JSON. Flask có khả năng xử lý dữ liệu được mã hóa JSON, do đó, nó có ý nghĩa hơn để gửi nó như thế. Đây là những gì bạn cần làm trên các mặt hàng:

$.ajax({ 
    type: 'POST', 
    // Provide correct Content-Type, so that Flask will know how to process it. 
    contentType: 'application/json', 
    // Encode your data as JSON. 
    data: JSON.stringify(post_obj), 
    // This is the type of data you're expecting back from the server. 
    dataType: 'json', 
    url: '/some/url', 
    success: function (e) { 
     console.log(e); 
    } 
}); 

Trên dữ liệu phía máy chủ được truy cập thông qua request.json (đã được giải mã):

content = request.json['content'] 
+0

Tuyệt vời! cảm ơn :) – Robin

2

Nếu bạn kiểm tra POST được gửi bởi jQuery, nhiều khả năng bạn sẽ thấy rằng content là thực sự là được chuyển thành content[]. Để truy cập nó từ đối tượng request của Flask, bạn sẽ cần sử dụng request.form.getlist('content[]').

Nếu bạn muốn chuyển nó qua content, bạn có thể thêm traditional: true vào cuộc gọi $.ajax() của mình.

Thông tin chi tiết về điều này có thể được tìm thấy trong phần 'dữ liệu' và 'truyền thống' của http://api.jquery.com/jQuery.ajax/.

+0

cảm ơn câu trả lời của bạn. – Robin

+0

khi tôi đặt 'truyền thống: true' thành $ .ajax. tôi đã nhận được một chuỗi như '[đối tượng] 'trong máy chủ ... nhưng nó không phải là những gì tôi muốn: ( – Robin

+0

Các công nghệ bên máy chủ khác nhau xử lý khác nhau. Bạn có thể muốn xem câu trả lời về JSON do Audrius cung cấp – dirn

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