我正在使用Ajax向Django发送POST请求。
这是我的ajax代码:
$("#submitdata").click(function(){
values = {
"tmode": tmode,
"fmode": fmode,
"t_cool": t_cool,
"t_heat": t_heat,
"hold": hold
};
var jsonText = JSON.stringify(values);
$.ajax({
url: "/submitdata/",
type: 'POST',
data: jsonText,
dataType: 'json',
success:function(data){
alert("Inside success function");
alert(data.tmode);
},
/*complete:function(){
console.log('complete');
},*/
error:function(){
alert("error"); }
}); });
以下是我的观点:
@login_required
def submitvalues(request):
#context = RequestContext(request)
if request.POST:
jsonvalues = json.loads(request.raw_post_data)
print json.dumps(jsonvalues)
#temp = jsonvalues["temp"]
tmode = jsonvalues['tmode']
fmode = jsonvalues['fmode']
t_cool = '65'
t_heat = '75'
hold = jsonvalues['hold']
if jsonvalues.__contains__('t_cool')>=1:
t_cool = jsonvalues['t_cool']
if jsonvalues.__contains__('t_heat')>=1:
t_heat = jsonvalues['t_heat']
jsonresult = {
'tmode':tmode,
'fmode':fmode,
't_cool':t_cool,
't_heat':t_heat,
'hold':hold,
}
'''return render_to_response('wifithermostat_3m50/wifithermo3m50.html',
{'tmode':tmode,'fmode':fmode,'t_cool':t_cool,'t_heat':t_heat,'hold':hold,
},
context)'''
if request.is_ajax()== True:
return HttpResponse(json.dumps(jsonresult),mimetype='application/json')
我在视图中获取值。但是回应并没有成功。我只是想从本质上回复相同的数据。但我没有看到任何成功的消息。你能指导我哪里出错吗?
首先,即使在访问视图功能之前,也会弹出ajax函数错误部分的警告消息。此外,它永远不会成为ajax调用的成功部分。
我在runserver控制台中遇到了Broken Pipe Error。
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/django/core/servers/basehttp.py", line 284, in run
self.finish_response()
File "/usr/lib/python2.7/dist-packages/django/core/servers/basehttp.py", line 324, in finish_response
self.write(data)
File "/usr/lib/python2.7/dist-packages/django/core/servers/basehttp.py", line 403, in write
self.send_headers()
File "/usr/lib/python2.7/dist-packages/django/core/servers/basehttp.py", line 467, in send_headers
self.send_preamble()
File "/usr/lib/python2.7/dist-packages/django/core/servers/basehttp.py", line 385, in send_preamble
'Date: %s\r\n' % http_date()
File "/usr/lib/python2.7/socket.py", line 324, in write
self.flush()
File "/usr/lib/python2.7/socket.py", line 303, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe
如果我不在.click(function() {});
内定义,那么此ajax调用可以正常工作
我正在发送带有普通点击功能的POST请求。为什么我不能在点击属性中执行此操作?
答案 0 :(得分:0)
@jerry-meng:它不适用于任何触发事件。我不知道为什么。
但问题的解决方案是阻止按下按钮时发生的默认操作。
修改后的代码:
$( "#submitthermostatdata" ).click(function(evt) {
evt.preventDefault();
values = {
"tmode": tmode,
"fmode": fmode,
"t_cool": t_cool,
"t_heat": t_heat,
"hold": hold
};
var jsonText = JSON.stringify(values);
console.log(jsonText);
$.ajax({
url : '/submitdata3m50/',
type: 'POST',
data: jsonText,
dataType: 'json',
success : function(data) {
var testinggg = $.parseJSON(data.tmode);
alert(testinggg);
alert("testing");
},
error: function(data) {
alert("something really wrong");
}
}); });
答案 1 :(得分:0)
如果您的按钮是例如在表单内部,然后默认操作将重新加载页面,这将中断帖子,从而给你一个破管。
通过添加preventDefault,可以防止重新加载。