2012-03-16 3 views
9

ठीक है, मैं अपनी परियोजना पर एक विश्वसनीय बैकएंड के साथ काम कर रहा हूं, और jquery के माध्यम से डेटा जमा कर रहा हूं।जेएसओएन और पायथन फ्लास्क पोस्ट करना - Werkzeug डीबगर का उपयोग करने के लिए कोई तकनीक?

मुझे कहना होगा कि werkzeug डीबगर विशेष रूप से डीबगिंग के लिए उत्कृष्ट है जब आप मेरे जैसे एक भयानक पायथन प्रोग्रामर हैं। आप उस प्रयोजन पर एक अपवाद फेंकते हैं जहां आप जांच करना चाहते हैं, और डीबगर प्रदान किए गए एचटीएमएल का उपयोग कर कोड और चर का निरीक्षण करें।

हालांकि जब आप प्राप्त करने के बजाय एक पोस्ट अनुरोध भेजते हैं, तो यदि आप बैकएंड कोड पर अपवाद फेंकते हैं, तो ब्राउज़र प्रतिक्रिया टेक्स्ट प्रस्तुत नहीं करेगा।

क्या कोई तकनीक है जिसका उपयोग मैं प्रतिक्रिया पाठ प्रस्तुत करने के लिए कर सकता हूं, क्योंकि इसमें जावास्क्रिप्ट और सबकुछ है?

मैं ऐसे की तरह, एक पॉप अप विंडो में प्रतिक्रिया पाठ इंजेक्षन करने की कोशिश कर के रूप में अलग अलग चीजें कोशिश कर रहा हूँ:

  $.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

के लिए किसी भी मौका लिखते थे आप अभी तक एक समाधान है? मैं * वास्तव में * इच्छा करता हूं कि मैं यह कर सकता हूं। – David

+0

अभी तक कोई समाधान नहीं, क्षमा करें ...मैं अब और नहीं ढूंढ रहा हूं, आप जो करना चाहते हैं वह है सर्वर पर अपने फ्लास्क एप्लिकेशन में डीबगर संलग्न करना और वहां अपने कोड को ट्रेस/ट्रेस करना। –

उत्तर

3

आपका दृष्टिकोण लगभग सही था। मैं एक नई विंडो में प्रतिक्रिया पाठ (WERKZEUG या बोतल बिल्कुल के लिए विशिष्ट नहीं) खोलने के लिए निम्नलिखित कोड का उपयोग कर रहा:

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

अंतिम पंक्ति सबसे महत्वपूर्ण है। इसके बिना, कोड आपके जैसा व्यवहार करेगा - यह किसी भी जावास्क्रिप्ट को निष्पादित नहीं करेगा, क्योंकि ब्राउजर को नहीं पता कि डोम पूरी तरह से लोड हो गया है।

+1

जो लोग jQuery का उपयोग करते हैं उनके लिए: https://gist.github.com/joostdevries/6060936 – joostdevries

1

जावास्क्रिप्ट नहीं, लेकिन आपने फ़ायरबग का उपयोग करने का प्रयास किया है, तो आप एक नए टैब में प्रतिक्रिया देखने के लिए विकल्प का उपयोग कर सकते हैं (नए टैब में ओपन रिस्पॉन्स)।

+0

हाँ, यह एचटीएमएल प्रस्तुत करता है, लेकिन जावास्क्रिप्ट काम नहीं करेगा ... –

0

यदि आप ग्राहक और सर्वर कोड दोनों में कुछ बदलाव करने के लिए तैयार हैं, तो आप इसे आजमा सकते हैं। आपकी त्रुटि कॉलबैक में आप JSON डेटा फिर से भेज देंगे लेकिन एक समरूप फॉर्म सबमिशन के रूप में। आप jQuery का उपयोग करके फॉर्म बनायेंगे, इसे input टैग दें और अपना JSON उसमें रखें और फॉर्म सबमिट करें। कुछ की तरह:

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

मेरे पास है:

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

सर्वर साइड पर, आप जब अनुरोध के सामग्री प्रकार आवेदन/json है और प्रपत्र डेटा, जैसे के रूप में JSON नियमित तरीके से स्वीकार करना होगा कभी कोशिश नहीं की लेकिन मुझे पता है कि आप जिस समस्या का सामना कर रहे हैं और यह बहुत समय बर्बाद कर सकता है। यदि आप इसे आजमाते हैं तो मैं जानना चाहता हूं कि यह कैसे काम करता है।

+0

मुझे लगता है कि मैं अभी भी इस पर कुछ सोच बिताना चाहता हूं लेकिन वास्तव में पर्याप्त समय नहीं मिला। मैंने कुछ महीने पहले इस समाधान के साथ खेलना शुरू किया था, और यह वास्तव में काम नहीं करता था। –

0

मार्कस का उत्तर पूरी तरह से काम करता है। बहुत बहुत धन्यवाद! यह मुझे इतना परेशानी बचाया।

भी एक jqxhr वस्तु

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

var jqxhr = $.post(...) 

करने के लिए अपने संचालकों बताए पर विचार तो आप अपने नए विंडो

w.document.write(jqxhr.responseText);