[英]Django Ajax Post Request Issue
我正在使用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調用的成功部分。
我在運行服務器控制台中收到“管道破裂”錯誤。
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調用會正常工作.click(function() {});
我正在使用常規點擊功能發送POST請求。 為什么不能在click屬性中執行此操作?
@ 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");
}
}); });
如果您的按鈕位於表單內部,則默認操作是重新加載頁面,這將中斷發布,從而使您的管道斷了。
通過添加preventDefault,可以防止此重新加載。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.