【问题标题】:Returning plain text from django to ajax call将纯文本从 django 返回到 ajax 调用
【发布时间】:2023-03-08 09:36:01
【问题描述】:

我有一个像这样的 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')'谷歌搜索显示这是因为浏览器已经移动,所以没有任何东西可以接收到响应.我尝试将超时设置为一个较大的值,但没有任何乐趣。我怎样才能防止这种情况?似乎不可能从浏览器发出同步请求。

【问题讨论】:

  • 检查“out”变量是否包含任何文本...而且,据我所知,您在使用 http 响应时必须提供文本长度。 (我的意思是 CONTENT_LENGTH 标题)
  • 是的 - 在我的示例中它具有“无效的文件格式”。格式为:“Toolname,Type,IPaddress,login,pw”' 我没有看到任何关于在文档中提供长度的信息 (docs.djangoproject.com/en/1.5/ref/request-response/…)
  • 啊..所以你的问题不在于发送响应。我认为您的问题出在 autoDeploy.py - 因为您使用 python 启动此文件,并尝试读取输出。这意味着您会从脚本“autoDeploy.py”中获得文本“工具名、类型、IP地址、登录名、密码”。
  • 是的,autoDeploy.py 脚本将该输出发送回视图中的代码,然后我想将其作为请求响应发送回。视图中的代码获取输出,并且正在发送它。问题似乎是浏览器没有等待它。请参阅我修改后的帖子。
  • 如果你在浏览器中将url写入地址栏(不使用ajax,只需手动写入url),-浏览器得到什么响应?

标签: jquery python ajax django


【解决方案1】:

我解决了这个问题 - 问题是我没有在 ajax 调用所属的 onclick 处理程序中返回 false。我在这里读到:

jQuery Ajax requests are getting cancelled without being sent

【讨论】:

    猜你喜欢
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 2018-07-28
    • 2016-01-19
    • 1970-01-01
    • 2014-01-29
    相关资源
    最近更新 更多