从django返回纯文本到ajax调用

时间:2015-04-07 16:44:38

标签: jquery python ajax django

我有一个看起来像这样的ajax调用;

        $.ajax({
            type : 'GET',
            url: 'url',
            data: 'data='+data,
            success: function(configOut) {
                alert(configOut);
            },
            error: function(configOut) {
                alert(configOut);
            }
        });

调用的视图执行此操作:

command = ['python', 'autoDeploy.py']
p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
out = p.stdout.read()
rv = p.wait()
if rv: 
    status = 400
else:
    status = 200

return HttpResponse(out, content_type="text/plain", status=status)

在调试器中,我可以看到我返回这个:

(Pdb) print HttpResponse(out, content_type="text/plain", status=status)
Content-Type: text/plain

Invalid file format. Format is: "Toolname,Type,IPaddress,login,pw"

但是在我的成功或错误功能中,我似乎无法访问该文本。 configOut有:

    Object {readyState: 0, setRequestHeader: function, getAllResponseHeaders: function, getResponseHeader: function, overrideMimeType: function…}

如何查看正在返回的文本?

我刚注意到的一点是,在Chrome开发者工具中,在此请求的网络标签中,在状态/文本列中,它显示"(已取消)" - 不确定那是什么意思。如果我从浏览器运行相同的请求,我会收到回复。

我进一步调试了这一点,发现在服务器端我得到了错误:(32,' Broken pipe')'谷歌搜索显示它是因为浏览器已经移动,所以没有什么可以收到响应。我已经尝试将超时设置为较大的值,但没有快乐。我怎么能防止这种情况?似乎无法从浏览器执行同步请求。

1 个答案:

答案 0 :(得分:0)

我解决了这个问题 - 问题是我没有在acax调用是其中一部分的onclick处理程序中返回false。我在这里读到了这个:

jQuery Ajax requests are getting cancelled without being sent