dojo/request PUT方法dosn'不起作用
dojo/request PUT method dosn't work
我有一个使用Python Django和Dojo框架的web应用程序。我想从Dojo(使用Dojo/request)向服务器Django发送一个PUT请求,但当服务器收到请求时,其中的数据是空的,并验证Invalid。但当我把方法从PUT改为POST时,它是正确的。
这是我的代码:
_save: function(data){
var idForm = "editForm" + this.id;
var value = dijit.byId(idForm).get('value');
console.log(value);
request.put("/api/guestbook/"+this.bookName+"/greeting/"+this.id+"/", {
data: {
book_name: this.bookName,
message: value.message
},
headers: { "X-CSRFToken": _cookie('csrftoken') }
}).then(lang.hitch(this, function(text){
}));
},
在Django:
def put(self, request, *args, **kwargs):
form = self.get_form(self.form_class)
logging.warning(form)
logging.warning(request.PUT)
if form.is_valid():
logging.warning("This form is VALID")
else:
logging.warning("This form is INVALID!!!")
有人能帮我吗?谢谢你的帮助!
我在下面找到了接收PUT方法的方法:
def put(self, request, *args, **kwargs):
request.PUT = QueryDict(request.body)
form = self.form_class(request.PUT)
if form.is_valid():
logging.warning("This form is VALID")
else:
logging.warning("This form is INVALID")
这没问题:)
谢谢大家!
我从您的X-CSRFToken标头猜测您正在进行跨域请求,即CORS。
如果你在浏览器的控制台中查看,你可能会看到一个OPTIONS请求被发送到服务器。这被称为"preflight请求",您的服务器需要用CORS头进行响应,告诉浏览器可以进行跨域PUT请求。
在您的情况下,您希望服务器使用类似于的标头进行响应
Access-Control-Allow-Origin: http://your-site-hostname-and-port
Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: X-CSRFToken
简单的POST请求不需要preflight OPTIONS请求,这可能就是它工作的原因。这里有一个关于html5rocks的非常好的教程。
相关文章:
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 监视函数从服务返回不起作用,但作用域函数起作用
- 幻灯片滚动javascript不起作用
- 简单的javascript在Shopify中不起作用
- Recaptcha在IE7和IE8中不起作用
- Ember Data DS.Model's set函数不起作用
- JsFiddle上的鼠标事件不起作用
- 我的AngularJS表达式没有'不起作用
- 点击按钮输入不起作用
- 面向对象的Javascript代码在IE7中不起作用
- 分部隐藏在jquery中不起作用
- 在phonegap应用程序内部重定向不起作用
- Array.length似乎不起作用;console.log则显示其他情况
- $ionicplatform内的$scope不;不起作用
- 我的javascript for循环不起作用
- Meteor-添加用户自定义字段的方法不起作用
- 为什么 .focus() 不起作用,而 .css(“color”,“red”) 在同一个选择器上起作用
- Textarea必需的attribut在javascript中不起作用
- dojo/request PUT方法dosn'不起作用
- mozilla css转换属性dosn'不起作用