2016-10-04 6 views
6

इस तरह के this के रूप में सवाल का डुप्लिकेट, बल्कि विपरीत नहीं है: मैं एक रूप है कि मैं jQueryएचटीएमएल फॉर्म * पोस्ट * प्राप्त करने और प्राप्त करने के लिए प्रतीत होता है?

$('<form>', { 
     action : 'service', 
     method : 'post', 
     target : '_blank' 
    }).append(
     $('<input>', { 
      type : 'hidden', 
      name : 'payload', 
      value : JSON.stringify(payload) 
     }) 
    ).appendTo('body').submit().remove(); 

ताकि मैं HTML के साथ एक अलग पेज खोल सकते हैं यह किया जाता है के माध्यम से प्रस्तुत करने कर रहा हूँ है।

जब से मैं काफी जटिल जानकारी का एक बहुत प्रस्तुत करने की आवश्यकता है, मैं वास्तव में क्या करना है उन सब को एक बड़ा JSON स्ट्रिंग में क्रमानुसार, तो केवल एक ही क्षेत्र ("पेलोड") के साथ एक रूप बना सकते हैं और प्रस्तुत कि है।

प्राप्त अंत एक फिल्टर है कि इस तरह से चला जाता है है:

  • अगर पद्धति POST है,
  • और वहाँ केवल एक प्रस्तुत चर,
  • है और वह एक चर के नाम है " पेलोड ",
  • फिर जेएसओएन-डीकोड अपना मूल्य और नकली जीईटी डेटा बनाने के लिए इसका इस्तेमाल करें।

तो जब GET डेटा बहुत अधिक बढ़ता है तो मैं वास्तविक स्क्रिप्ट को संशोधित किए बिना विधियों को स्विच कर सकता हूं, जिसमें कोई बदलाव नहीं होता है।

यह आज तक हमेशा काम करता है।

क्या होना चाहिए

सर्वर एक भी पोस्ट प्रस्तुत होने चाहिए और उसे एक पॉपअप विंडो में उचित प्रतिक्रिया खोलें।

क्या वास्तव में के बजाय

सर्वर सही पोस्ट प्रस्तुत प्राप्त करता है ...

... जाहिरा तौर पर यह ध्यान नहीं देता होता है ...

... और तुरंत के बाद कि, ब्राउज़र कोई पैरामीटर के साथ GET जारी करता है, और यह उस पैरामीटर रहित GET का परिणाम है जो पॉपअप विंडो में प्रदर्शित होता है (क्षमा को क्षमा करें)।

काफी आश्चर्यजनक रूप से, यह हमेशा "आपने कोई पैरामीटर सबमिट नहीं किया" त्रुटि है। ओह।

क्या मैं पहले से ही किया था

  • सत्यापित इस विधि से काम करता है, और हमेशा अलग अलग रूपों और विभिन्न सेवा अंतिमबिंदुओं
  • एक हार्डकोडेड <FORM> HTML में साथ फार्म की जगह करने की कोशिश की के साथ पिछले कुछ वर्षों के लिए काम किया है कि बिना किसी jQuery के। वही परिणाम तो, यह एक jQuery समस्या नहीं है।
  • विभिन्न ब्राउज़रों के साथ प्रयास किया गया (अगर यह केवल कुछ ब्राउज़रों पर काम करता है तो इससे मदद नहीं मिलेगी: मुझे सबसे आधुनिक ब्राउज़र का समर्थन करने की ज़रूरत है। हालांकि, मैंने जांच की। सौभाग्य से, यह विफलता उन सभी में पुन: उत्पन्न होती है, यहां तक ​​कि iPhones पर भी)।
  • कुछ डेटा भेजने की कोशिश की (बस "{test: 0}")।
  • जैसे ही कुछ भी प्राप्त होता है, एंडपॉइंट स्क्रिप्ट को रोकने की कोशिश की।
  • चेक स्टैक ओवरफ़्लो चेक किया गया। मैंने पाया seems to be the same problem, variousflavours में, लेकिन यह थोड़ा सा आराम है। This one में एक दिलचस्प गॉचा है लेकिन नहीं, यह मदद नहीं करता है।
  • फ़ायरवॉल, प्रॉक्सी, एडब्लॉकर्स और प्लगइन्स की जांच की गई (अब मैं सादा वेनिला फ़ायरफ़ॉक्स का उपयोग कर रहा हूं)।
  • आईटी लोगों को बुलाया और हाल ही में एसवीएन प्रतिबद्धताओं के बारे में पूछे जाने वाले प्रश्न पूछे। कोई नहीं था।

क्या मैं अभी तक नहीं किया

  • चेक निम्न स्तर पर HTTPS बातचीत (मैं पर्याप्त पहुँच नहीं है)।
  • एक सर्वर के कॉन्फ़िगरेशन, चरण-दर-चरण की तुलना में, जहां यह काम करता है और नया सर्वर जहां यह नहीं करता है।
  • काफी स्पष्ट रूप से, मेरी सोच टोपी डालें। कुछ स्पष्ट हो सकता है कि मुझे याद आ रही है और मैं खुद को एक बड़े चेहरे के लिए स्थापित कर रहा हूं।
+1

एक शुद्ध सर्वर से संबंधित मुद्दे अर्थात एक HTML में hardcoded साथ फार्म की जगह _tried, किसी भी jQuery के बिना लगता है। वही परिणामतो, यह एक jQuery समस्या नहीं है। _ इसलिए आपको सर्वर प्रक्रिया को डीबग करने और PHP या जो भी काम कर रहे jQuery jQuery – mplungjan

उत्तर

3

मैन्युअल रूप से सर्वर से अनुरोध भेजने के लिए hurl.it या Postman जैसे टूल का उपयोग करें। उपकरण सभी HTTP शीर्षकों सहित सर्वर से प्रतिक्रिया प्रदर्शित करेंगे। मुझे संदेह है कि सर्वर एक रीडायरेक्ट (स्टेटस कोड 30X) के साथ प्रतिक्रिया करता है जो POST पूर्ण होने के बाद जारी किए जाने का अनुरोध करता है।


अद्यतन: HTTP पुनर्निर्देश

HTTP अंतरण जरूरी रीडायरेक्ट लक्ष्य के लिए एक अनुरोध जारी करने के लिए एक ही HTTP विधि या यहां तक ​​कि एक ही डेटा का उपयोग नहीं करते। विशेष रूप से गैर-बेवकूफ अनुरोधों के लिए यह एक सुरक्षा समस्या हो सकती है (आप आम तौर पर अपने फॉर्म सबमिशन को दूसरे पते पर पुनः सबमिट नहीं करना चाहते हैं)। हालांकि, HTTP तुम दोनों विकल्प देता है:

[...] इस कारण से, HTTP/1.1 (RFC 2616) अनुरोध के परिवर्तन अनिवार्य जोड़े गए नए स्थिति कोड 303 और 307 [...], 303 के साथ प्राप्त करने के लिए टाइप करें, और मूल रूप से भेजे गए अनुरोध प्रकार को 307 संरक्षित करें। इस असंबद्धता द्वारा प्रदान की गई अधिक स्पष्टता के बावजूद, 302 कोड अभी भी वेब ढांचे में नियोजित हैं ताकि ब्राउज़र के साथ संगतता को संरक्षित किया जा सके जो HTTP/1.1 विनिर्देश को लागू नहीं करते हैं।

इसके अलावा 301s के लिए

[Wikipedia: HTTP 302 से]:

301 स्थिति कोड GET या HEAD के अलावा अन्य किसी भी प्रकार की एक अनुरोध के जवाब में प्राप्त होता है, तो ग्राहक चाहिए रीडायरेक्ट करने से पहले उपयोगकर्ता से पूछें।

[Wikipedia: HTTP 301 से]

+0

** पैसे पर ** ** दिखाने की आवश्यकता है। एंडपॉइंट यूआरएल के बाद '/' जोड़ना समस्या हल हो गया। नए अपाचे सर्वर में किसी भी स्लैशलेस निर्देशिका से रीडायरेक्ट होता है (जिसका मतलब निर्देशिका इंडेक्स को मारना है) उसी URL पर, स्लेश किया गया है। सिवाय इसके कि इसे एक जीईटी के रूप में निष्पादित किया जाता है (मेरे लिए सभी ब्राउज़रों के साथ एक समस्या की तरह दिखता है। अगर मैं आपको कहीं भी रीडायरेक्ट करता हूं, तो मैं कहूंगा कि आपको उसी विधि के साथ * रीडायरेक्ट करना चाहिए * - या यह सिर्फ मुझे है?)। – LSerni

+0

बीटीडब्ल्यू, आप उन अन्य प्रश्नों को देखना चाह सकते हैं जिन्हें मैंने स्वयं उद्धृत किया था। ऐसा लगता है कि उनमें से कई को भी यही समस्या है। – LSerni

+0

मैंने अभी HTTP रीडायरेक्ट कोड पर कुछ स्पष्टीकरण जोड़े हैं। –

संबंधित मुद्दे