2015-03-17 28 views
6

मैं कैसे ajax और बोतल का उपयोग करने के सीख रहा हूँ फ्लास्क में 'ImmutableMultiDict' से डेटा, तो मैं क्या करूँ मैं एक ajax अनुरोध post अनुरोध के रूप में मेरी अजगर फ़ाइल में भेज रही है और मैं प्राप्त डेटा प्राप्त करने केकैसे

My html file contains this code

var data = {"name":"John Doe","age":"21"}; 
$.ajax({ 
    url:'/post/data', 
    datatype : "json", 
    contentType: "application/json; charset=utf-8", 
    data : JSON.stringify(data), 
    success : function(result) { 
    jQuery("#clash").html(result); 
    },error : function(result){ 
    console.log(result); 
} 
}); 

और मेरे अजगर फ़ाइल है:

@app.route('/post/data',methods=['GET','POST']) 
def postdata(): 
    #do some 
    data = str(request.args) 
    json_dumps = json.dumps(data) 
    return json_dumps 

इससे मुझे पृष्ठ पर डेटा निम्नलिखित

+०१२३५१६४१०६
"ImmutableMultiDict([('{\"name\":\"John Doe\",\"age\":\"21\"}', u'')])" 

और यही मेरी request.query_string{%22name%22:%22John%20Doe%22,%22age%22:%2221%22}

लग रहा है तो मैं name और age कैसे मिलता है है। कृपया मुझे सही करें अगर मैं कहीं भी गलत हूं। अग्रिम धन्यवाद।

+0

'request.json.get ('name')' – kartheek

उत्तर

12

आपको वास्तव में ImmutableMultiDict से डेटा प्राप्त करने की आवश्यकता नहीं है। आपके पास जो कुछ है, उसमें कुछ त्रुटियां हैं जो आपको जेसन डेटा के रूप में प्रतिक्रिया खींचने से रोक रही हैं। सबसे पहले, आपको अपने AJAX कॉल के पैरामीटर को थोड़ा सा ट्विक करना होगा। आपको कॉल प्रकार में POST के रूप में जोड़ना चाहिए। इसके अलावा, datatype को dataType के रूप में लिखा जाना चाहिए। आपका नया कॉल किया जाना चाहिए:

var data = {"name":"John Doe","age":"21"}; 
$.ajax({ 
    type: 'POST', 
    contentType: 'application/json', 
    url: '/post/data', 
    dataType : 'json', 
    data : JSON.stringify(data), 
    success : function(result) { 
     jQuery("#clash").html(result); 
    },error : function(result){ 
     console.log(result); 
    } 
}); 

डेटा अब वास्तव में json प्रकार के साथ एक पोस्ट अनुरोध के रूप में भेजा जा रहा है। बोतल सर्वर पर, अब हम इस प्रकार पुत्र जानकारी के रूप में डेटा पढ़ सकते हैं:

@app.route('/post/data',methods=['GET','POST']) 
def postdata(): 
    jsonData = request.get_json() 
    print jsonData['name'] 
    print jsonData['age'] 
    return "hello world" #or whatever you want to return 

यह सफलतापूर्वक John Doe और 21 प्रिंट होगा।

मुझे बताएं कि यह आपके लिए काम करता है या आपके पास कोई अतिरिक्त प्रश्न हैं!

संपादित करें:

# include this import at the tomb 
from flask import jsonify 

@app.route('/post/data',methods=['GET','POST']) 
    def postdata(): 
     ... 
     return jsonify(success=True, data=jsonData) 
+0

का उपयोग करें यह विधि ठीक काम करती है .. मुझे आवश्यकतानुसार डेटा को पायथन फ़ाइल में प्राप्त किया जाता है लेकिन AJAX में यह 'त्रुटि' फ़ंक्शन पर वापस आता है। –

+0

आप अपने फ़ंक्शन से क्या लौट रहे हैं? मैं आपको एक समाधान प्राप्त करूंगा। असल में, आप फ़ंक्शन को वापस लौटना चाहते हैं, और आप क्या दिखाना चाहते हैं? –

+0

ठीक है मुझे बिंदु मिल गया। मुझे अपने फ़ंक्शन से कुछ डेटा (जेसन) को अजाक्स के रूप में वापस लौटना चाहिए ताकि वह सफलता में प्राप्त हो या अन्यथा यह केवल त्रुटि में होगा .. आपकी तरह की मदद के लिए धन्यवाद –

4

मैं क्योंकि मैं AJAX के साथ एक फार्म भेजने के लिए कोशिश कर रहा हूँ इस पृष्ठ पर आ, और मैं अंत में एक समाधान नहीं मिला: आप इस प्रकार कुप्पी से ajax कॉल करने के लिए सफलता लौट सकते हैं।

$.ajax({ 
    type: "POST", 
    url: my_url, 
    data: $("#formID").serialize(), //form containing name and age 
    success: function(result){ 
     console.log(result); 
    } 
}); 

फिर, बोतल सर्वर पर:

app.route('/my_url', methods = [POST]) 
def some_function(): 
    name = request.form['name'] 
    age = request.form['age'] 
    # do what you want with these variables 
    return 'You got it right'