好吧,我正在使用我的项目的RESTful后端,并通过jquery提交数据。
我必须说werkzeug调试器非常适合调试,特别是当你像我这样可怕的python程序员时。您出于意图调查异常,并使用调试器呈现的html检查代码和变量。
但是,当您发送post请求而不是get时,如果在后端代码上抛出异常,当然浏览器将不会呈现响应文本。
我是否可以使用任何技术来呈现响应文本,考虑到它有javascript和所有内容?
我正在尝试不同的方法,例如尝试将响应文本注入弹出窗口,例如:
$.postJSON = function(url, data, callback, error_callback) {
return jQuery.ajax({
'type': 'POST',
'url': url,
'contentType': 'application/json',
'data': JSON.stringify(data),
'dataType': 'json',
'success': callback,
'error': error_callback
});
};
$.postJSON('/the_uri', {'foo': 'bar'},
function(response) {
var a = 0;
},
function(response) {
var html = response.responseText;
var my_window = window.open('', 'mywindow1', 'width=350,height=150');
$(my_window.document).find('html').html(html);
});
});
但是这不会很好地处理javascript。
有没有人有任何建议?
答案 0 :(得分:3)
你的方法几乎是正确的。我使用以下代码在新窗口中打开响应文本(根本不是特定于Werkzeug或Flask):
var w = window.open('', 'debug_stuff', 'width=540,height=150');
w.document.open();
w.document.write(response.responseText);
w.document.close();
最后一行是最重要的。没有它,代码就会像你的一样 - 它不会执行任何JavaScript,因为浏览器不知道DOM已经完全加载。
答案 1 :(得分:1)
不是javascript,但是您尝试使用Firebug,您可以使用该选项在新标签中查看响应(在新标签页中打开响应)。
答案 2 :(得分:0)
如果您准备对客户端和服务器代码进行一些更改,可以尝试这样做。在您的错误回调中,您将重新发送JSON数据,但作为同步表单提交。您将使用jQuery创建表单,给它一个input
标记并将您的JSON放入其中并提交表单。类似的东西:
$('<form method="post" style="display:none;">')
.attr('action', 'xxx')
.append(
$('<input>').val(JSON.stringify(data))
).appendTo('body')
.submit();
在服务器端,当请求的内容类型是application / json和表单数据时,您必须以常规方式接受JSON,例如:
json_string = request.form.get('__json')
if json_string:
data = json.loads(json_string)
我从未尝试过这个,但我知道你遇到的问题,这可能会浪费很多时间。如果你试试,我想知道它是如何运作的。
答案 3 :(得分:0)
马库斯的回答非常有效。非常感谢!这给我带来了太多麻烦。
还考虑将处理程序分配给jqxhr对象
http://api.jquery.com/jQuery.post/#jqxhr-object
var jqxhr = $.post(...)
然后你会写到新窗口
w.document.write(jqxhr.responseText);