के बाद एक पृष्ठ प्रस्तुत करें मैं एक फ्लास्क फ़ंक्शन में jQuery $ .post() के साथ एक फॉर्म से डेटा भेजता हूं। फ़ंक्शन डेटा की कुछ लंबी चलती गणना करता है। इस मामले में, मैं कुछ HTML वापस भेजना नहीं चाहता बल्कि एक नया टेम्पलेट प्रस्तुत करना चाहता हूं। जब मैं jQuery/AJAX के साथ फ़ंक्शन को कॉल करता हूं तो मैं यह कैसे कर सकता हूं?
प्रपत्र:
<form id='myform'>
<input type='text'> some input...
<input type='button' value='send form' id='mybutton'>
</form>
प्रपत्र इनपुट पर गणना कुछ समय लगता है, इसलिए मैं jQuery के साथ भेज दें:
$.("#mybutton").click(function() {
// get the data in form
$exampledata = 'foo'
$.post("/some/flask/function", {'data': $exampledata}, function(response) {
can I render a new template here with data from flask function?
});
});
कुप्पी में, इसी समारोह इस तरह दिखता है:
@app.route('/some/flask/function', methods=['POST'])
def longCalculation():
form = request.form
data = form['data']
result = runTheLongCalculation(data)
this does not work -->
return render_template('result.html',r=result)
how can I render a new template after an jQuery/AJAX call?
मैं एक रीडायरेक्ट यूआरएल और जेएसओएन वापस नहीं भेजना चाहता, लेकिन वास्तव में एक टेम्पलेट प्रस्तुत करना चाहता हूं।
यह काम करेगा। समस्या यह है: 'परिणाम' बड़ा और जटिल है। टेम्पलेट के साथ इसे टेबल में रखना आसान है। लेकिन पाइथन/फ्लास्क फ़ंक्शन में लंबे HTML आउटपुट को संकलित करना अच्छा नहीं होगा ... –
अधिक सामान्य: क्या आपको AJAX अनुरोध के बाद उत्पन्न डेटा (बहुत से) डेटा को सहेजने और इसे एक्सेस करने का सबसे अच्छा तरीका है अगला अनुरोध (यानी $ .post कॉलबैक में एक साधारण window.location.replace())। –
अधिक आम तौर पर, आप इसे डेटा की गणना/उत्पन्न कर सकते हैं, इसे स्थानीय रूप से सहेज सकते हैं (सर्वर-साइड, कुछ अस्थायी स्टोर जैसे मेमकैड या रेडिस या यहां तक कि डिस्क तक) और किसी विशिष्ट पैरामीटर के साथ किसी अन्य पृष्ठ पर रीडायरेक्ट करें (एक आईडी या इसके लिए समान गणना) जो परिणाम को सामान्य वेबपृष्ठ के रूप में दिखाती है। हालांकि, AJAX कॉल के माध्यम से बहुत सारे डेटा भेजने में कुछ भी गलत नहीं है - सभी उद्देश्यों और उद्देश्यों के लिए यह "सामान्य" HTTP अनुरोध के समान ही काम करता है। –