2012-06-06 14 views
6

मैंने बटन क्लिक के आधार पर एक AJAX पोस्ट फ़ंक्शन लागू किया है। कोडURL पोस्टिंग पर मेरे पोस्ट चर क्यों दिख रहे हैं?

$.ajax({ 
    type: "POST", 
    url: "includes/phpscripts?action=manage", 
    data: {location: loc, lat: latitude, lon: longitude, heading: head, filename: file}, 
    success: function(){ 
     $("#panoInfo").html("<div id='message'></div>"); 
     $("#message").html("Valid Submission"); 
    } 
}); 

मैं निर्दिष्ट POST पद्धति के बाद से मैं चर URL के माध्यम से दिखाई दे सकता है नहीं करना चाहती है। हालांकि, वे हैं।

मेरा परीक्षण यूआरएल पोस्टिंग से पहले

http://localhost/JMCTour/buildtour.php 

बाद में

http://localhost/JMCTour/buildtour.php?filename=1-prefix_blended_fused.jpg&location=Start+of+Tour&lat=43.682211&long=-70.450705&heading=100&submit=Save 

क्यों है?

+2

की तरह अपने से निपटने के लिए सही ढंग से सबमिट बटन और प्राप्त के माध्यम से सभी डेटा नहीं भेज लगता है बनाओ। क्या आप सबमिट कोड पोस्ट कर सकते हैं? –

+1

आप '$ .post()' का उपयोग कर सकते हैं ... –

+0

@ जेरेमीहोलोवाक्स वह '$ .post()' का उपयोग कर रहा है, केवल यह गैर-शॉर्टकट संस्करण है। देखें 'टाइप: "पोस्ट" ' –

उत्तर

3

docs for jQuery.ajax (जोर मेरा) से:

डेटा

डाटा सर्वर के लिए भेजा जा सकता है। यदि पहले से ही एक स्ट्रिंग नहीं है, तो इसे एक क्वेरी स्ट्रिंग में परिवर्तित कर दिया जाता है। यह जीईटी अनुरोध के लिए यूआरएल में जोड़ा गया है। इस स्वचालित प्रसंस्करण को रोकने के लिए processData विकल्प देखें। ऑब्जेक्ट कुंजी/वैल्यू जोड़े होना चाहिए। यदि मान एक ऐरे है, तो jQuery पारंपरिक सेटिंग (नीचे वर्णित) के मूल्य के आधार पर एक ही कुंजी के साथ एकाधिक मानों को क्रमबद्ध करता है।

और इसलिए:

processDataBoolean

डिफ़ॉल्ट: सच

डिफ़ॉल्ट रूप से, एक वस्तु (तकनीकी रूप डेटा विकल्प के लिए में पारित डेटा, एक स्ट्रिंग के अलावा और कुछ) को एक क्वेरी स्ट्रिंग में संसाधित और रूपांतरित किया जाएगा, जो डिफ़ॉल्ट सामग्री-प्रकार "एप्लिकेशन/एक्स-www-form-urlencoded" पर फ़िट होगा। यदि आप एक DOMDocument, या अन्य गैर-संसाधित डेटा भेजना चाहते हैं, तो इस विकल्प को गलत पर सेट करें।

+0

मुझे उस हिस्से को याद आया। मुझे सही दिशा बताने के लिए धन्यवाद! – Jason

4

मैं प्रश्न में जानकारी की कमी के कारण यहां कुछ मान्यताओं को बना रहा हूं।

<form> 
    <input type="text" name="lon" /> 
    <input type="text" name="lat" /> 
    <input type="text" name="heading" /> 
    <input type="file" name="image" /> 

    <input type="button" id="submit" value="Submit" /> 
</form> 

तुरंत हम एक समस्या है, आपकी फ़ाइल इनपुट:

से अधिक होने की संभावना अपने प्रपत्र कुछ इस तरह लग रहा है। फ़ाइलों को AJAX के माध्यम से jQuery के AJAX विधियों का उपयोग करके भेजा जा सकता है, बिना अतिरिक्त प्लगइन्स जो सही ढंग से दृश्यों के पीछे इसे संभालते हैं या अपना कोड लिखते हैं, बजाय छुपा आईफ्रेम या कुछ अन्य विधि (html5? फ़्लैश?) पर सबमिट करते हैं।

फ़ाइल इनपुट को अनदेखा करते हुए, यहां आपकी मूल समस्या है।

$("#submit").click(function(){ 
    $.ajax(...); 
}); 

मैंने AJAX विकल्पों को छोड़ दिया क्योंकि वे अप्रासंगिक हैं। समस्या यह है कि चूंकि आपके फॉर्म में बटन फॉर्म में आखिरी इनपुट है और सबमिट बटन नहीं है, यह सबमिट बटन की तरह कार्य करेगा और फॉर्म को तब तक सबमिट करेगा जब तक कि आप उस डिफ़ॉल्ट कार्रवाई को रोक नहीं देते। यदि आप उस डिफ़ॉल्ट कार्रवाई को नहीं रोकते हैं, तो फ़ॉर्म को "GET" के डिफ़ॉल्ट प्रकार के साथ सबमिट किया जाएगा क्योंकि आपने अपने फॉर्म में कोई प्रकार सेट नहीं किया है।

क्लिक करें घटना की डिफ़ॉल्ट कार्रवाई रोकने के लिए, या तो झूठी लौटने, या event.preventDefault()

$("#submit").click(function(event){ 
    event.preventDefault(); 
    $.ajax(...); 
}); 

का उपयोग फ़ाइल इनपुट समस्या शायद पहले से ही कई अन्य अतः सवालों में उत्तर दिया जाता है ठीक करना।

+0

आप लगभग सही हैं, सिवाय इसके कि मैं क्वेरी के माध्यम से फ़ाइल को ही नहीं भेज रहा हूं, केवल सापेक्ष स्थान। मुझे फाइलों को स्वयं संग्रहित करने या किसी डेटाबेस में लिंक के संबंध में डेटाबेस डिज़ाइन में एक पवित्र युद्ध का पता है। मैं इस उदाहरण में विकल्प 2 के लिए जा रहा हूँ। – Jason

7

सुनिश्चित करें कि आपके प्रपत्र टैग method='POST' है

<form method='POST'> 
... 
</form> 
संबंधित मुद्दे