2012-03-16 8 views
9

申し訳ありませんが、私は自分のプロジェクトでRESTfulなバックエンドを使って作業していて、jqueryでデータを送信しています。JSONとpython Flaskを投稿する - Werkzeugデバッガを使用する方法は?

あなたが私としてひどいpythonプログラマーである場合、werkzeugデバッガーは特にデバッグに優れていると言わなければなりません。調査したい場所に例外をスローし、レンダリングされたデバッガのhtmlを使用してコードと変数を検査します。

しかし、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); 
      }); 
     }); 

しかし、これは非常によくジャバスクリプトの世話をしません。

誰にも提案はありますか?

+0

にあなたはまだ解決策を持っている任意のチャンスを記述しますjqxhrオブジェクト

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

var jqxhr = $.post(...) 

にあなたのハンドラを割り当てることを検討しますか?私は本当にこれをやりたいと思っています。 – David

+0

解決はまだありません、申し訳ありません...私はもはや1つを探していません、あなたがしたいことがあるかもしれませんが、サーバー上のフラスコアプリケーションにデバッガーを接続し、そこにあなたのコードをトレース/トレースすることです。 –

答えて

3

あなたのアプローチはほぼ正しいです。私は(すべてでWERKZEUGまたはフラスコに固有ではない)新しいウィンドウで応答テキストを開くには、次のコードを使用しています:

var w = window.open('', 'debug_stuff', 'width=540,height=150'); 
w.document.open(); 
w.document.write(response.responseText); 
w.document.close(); 

最後の行が最も重要です。これがなければ、コードはあなたのものとして動作します。ブラウザはDOMが完全にロードされたことを知らないので、JavaScriptを実行しません。

+1

jQueryを使用している人向け:https://gist.github.com/joostdevries/6060936 – joostdevries

1

javascriptではありませんが、Firebugを使用しようとしましたが、新しいタブで応答を表示するオプションを使用できます(新しいタブで応答を開く)。

+0

ええと、HTMLをレンダリングしますが、javascriptは機能しません。 –

0

クライアントコードとサーバーコードの両方を変更する準備ができたら、これを試すことができます。エラーコールバックでは、JSONデータを再送信しますが、同期フォームの送信として行います。 jQueryを使用してフォームを作成し、inputというタグを付けてJSONを入れてフォームを送信します。私が持っている

json_string = request.form.get('__json') 
if json_string: 
    data = json.loads(json_string) 

:何かのように:フォームデータ、例えばとして要求のコンテンツタイプは、アプリケーション/ JSONであるとする場合、サーバー側で

$('<form method="post" style="display:none;">') 
    .attr('action', 'xxx') 
    .append(
     $('<input>').val(JSON.stringify(data)) 
    ).appendTo('body') 
    .submit(); 

、あなたはJSONに通常の方法を受け入れなければならないだろうこれを試したことはありませんが、あなたが抱えている問題を知っていて、それは多くの時間を無駄にすることがあります。あなたがそれを試してみると、それがどのように機能するか知りたいです。

+0

私はまだこれについていくつかの考えを費やしたいと思いますが、実際には十分な時間を見つけられませんでした。私は数ヶ月前にこのソリューションで遊んだし、実際には機能しませんでした。 –

0

マルクスの答えは完璧です。本当にありがとう!これは私に非常に面倒を救った。

も、あなたはあなたの新しいウィンドウ

w.document.write(jqxhr.responseText); 
関連する問題