9

好的,我正在我的项目中使用 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。

有人有什么建议吗?

4

4 回答 4

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 已经完全加载。

于 2013-02-06T19:05:10.323 回答
1

不是 javascript,但您是否尝试过使用 Firebug,您可以使用在新选项卡中查看响应的选项(在新选项卡中打开响应)。

于 2012-03-16T19:01:27.023 回答
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)

我从未尝试过,但我知道您遇到的问题,这会浪费很多时间。如果您尝试它,我想知道它是如何工作的。

于 2012-03-18T09:02:03.853 回答
0

马库斯的回答完美。非常感谢!这为我省去了很多麻烦。

还考虑将您的处理程序分配给 jqxhr 对象

http://api.jquery.com/jQuery.post/#jqxhr-object

var jqxhr = $.post(...)

然后你会写信到你的新窗口

w.document.write(jqxhr.responseText);
于 2013-02-23T18:08:26.213 回答