2016-07-01 2 views
1

Существует клиентский JavaScript и серверный Python, работающий от Django. Существует объект данных: foo_data = {"foo":1, "bar":2}.Отправить объект JSON через POST с JavaScript на Python

Теперь я хотел бы отправить пост-запрос, используя dojo/request/xhr и отправить foo_data вместе с другой переменной:

xhr.post(document.location.href, { 
    data: { 
     'is_foo': true, 
     'data': foo_data 
    }, 
    headers: { 'Content-Type': 'application/json' } 
}).then(function(text){ 
    console.log('The server returned: ', text); 
}); 

А потом читать посылать данные в views.py файле Джанго:

def post(self, request, *args, **kwargs): 
    json.loads(request.body) 

НО, это не работает:

  • если у меня есть foo_data , python не распознает его правильно как объект JSON и не может прочитать его, используя json.loads.
  • Я не могу закодировать foo_data используя JSON.parse, потому что это уже объект!
  • request.POST является пустой QueryDict
  • request.body имеет строку слово object (вместо реального объекта)

Любые идеи, как решить эту проблему?

Цель: отправить объект JSON из JS -> Python и прочитать его на серверной стороне.

ответ

2

dojo.xhr устарела, пожалуйста, рассмотреть вопрос об использовании dojo/request подробнее здесь:

https://dojotoolkit.org/reference-guide/1.10/dojo/request/xhr.html#dojo-request-xhr

Для живого примера поста на сервер, вы можете посмотреть исходный код этой страницы: https://dojotoolkit.org/documentation/tutorials/1.8/ajax/demo/dojo-request-xhr-post.php

Вот некоторые простой пример использования:

 require(dojo/request"], 
      function(request){ 
        // post the data to the server 
        request.post("your/server/script", { 
         // send your data here 
         data: { yourData: 1}, 
         // wait 2 seconds for a response 
         timeout: 2000 

        }).then(function(response){ 
         // do smt here when operation is successfully executed 
        }); 

      } 
     ); 

Что касается вашего примера кода в вашем вопросе, вы не указали свой код на стороне сервера. Но вы можете попытаться передать свои данные на сервер, используя JSON.stringify().

Смежные вопросы