Django Ajax发布请求问题

时间:2014-04-02 16:03:22

标签: jquery ajax django

我正在使用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请求。为什么我不能在点击属性中执行此操作?

2 个答案:

答案 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,可以防止重新加载。