簡體   English   中英

Django Ajax發布請求問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM