जावास्क्रिप्ट का उपयोग करके पोस्ट अनुरोध पैरामीटर कैसे पढ़ें


92

मैं अपने HTML से पोस्ट अनुरोध पैरामीटर पढ़ने की कोशिश कर रहा हूं। मैं जावास्क्रिप्ट में निम्नलिखित कोड का उपयोग करके प्राप्त अनुरोध मानदंड पढ़ सकता हूं।

$wnd.location.search

लेकिन यह पोस्ट अनुरोध के लिए काम नहीं करता है। क्या कोई मुझे बता सकता है कि जावास्क्रिप्ट का उपयोग करके मेरे HTML में पोस्ट अनुरोध पैरामीटर मान कैसे पढ़ें?

जवाबों:


184

POST डेटा वह डेटा है जिसे सर्वर साइड हैंडल किया जाता है । और जावास्क्रिप्ट क्लाइंट की तरफ है। तो कोई तरीका नहीं है कि आप जावास्क्रिप्ट का उपयोग करके पोस्ट डेटा पढ़ सकें।


69
हालांकि निष्कर्ष सही है (आप जावास्क्रिप्ट से उस डेटा को प्राप्त नहीं कर सकते हैं) तर्क गलत है। क्लाइंट (ब्राउज़र) वह है जो पहले स्थान पर सर्वर पर POST डेटा भेजता है। तो ग्राहक को अच्छी तरह से पता है कि वह डेटा क्या है। वास्तविक कारण यह है कि ब्राउज़र उस डेटा को जावास्क्रिप्ट के लिए उपलब्ध नहीं कराता है (लेकिन यह पूरी तरह से हो सकता है)।
GetFree

@GetFree: वेब डेवलपर के लिए पोस्ट वेरिएबल के इस तथाकथित ज्ञान में क्या अच्छा है? कोई भी वेब डेवलपर क्लाइंट-साइड स्क्रिप्ट नहीं लिखेगा, जो ब्राउज़र पर पहले से बताई गई हो, जो संभवतः जावास्क्रिप्ट को पोस्ट डेटा उपलब्ध कराती है, जैसा कि आप बताते हैं, यह कभी भी व्यवहार में नहीं होता है । इस प्रकार, वास्तविक दुनिया में , यहां प्रस्तुत उत्तर सही है, साथ ही साथ मेरा अपना भी है।
प्लैटिनम एज़्योर

34
@ प्लैटिनम एज़्योर, मुझे यकीन नहीं है कि आप इस बिंदु को समझेंगे। आप कहते हैं कि सर्वर में POST डेटा मौजूद है, और चूंकि जावास्क्रिप्ट क्लाइंट में चलता है, इसलिए ऐसा कोई तरीका नहीं है कि JS उस डेटा तक पहुंच सके। यह गलत है, POST डेटा क्लाइंट और सर्वर दोनों में मौजूद है और इस कारण जेएस उस डेटा तक नहीं पहुंच सकता है क्योंकि क्लाइंट (ब्राउज़र) इसे जेएस को उपलब्ध नहीं कराता है। इतना सरल है।
GetFree

13
@ प्लैटिनम एज़्योर, हाँ, यह किसी भी कारण से नहीं किया जा सकता है। लेकिन अगर आप यह समझाने जा रहे हैं कि वह कारण क्या है, तो सुनिश्चित करें कि यह सही कारण है। आप समझाते हैं कि यह क्यों संभव नहीं है यह गलत है, यही बात है।
GetFree

10
चूंकि ब्राउज़र को वेब ऐप, ऐप चलाने (अक्सर) ब्राउज़र में 100 प्रतिशत (फ़ाइलों की मेजबानी के अलावा कोई अन्य सर्वर) जैसी चीजें नहीं मिल रही हैं, इसलिए यह बड़ी मात्रा में डेटा प्राप्त करने में सक्षम होने की स्वाभाविक आवश्यकता बन जाएगी। क्वेरी स्ट्रिंग (GET विधि) (4K सोचो) के आकार की एक सीमा है, इसलिए जावास्क्रिप्ट से POSTED डेटा के बड़े हिस्से को पढ़ने की क्षमता एक महान विचार IMHO होगा।
नेटसी

26

एक जावास्क्रिप्ट चर को पॉप्युलेट करने के लिए सर्वर प्राप्त करने के लिए PHP का एक छोटा सा टुकड़ा त्वरित और आसान है:

var my_javascript_variable = <?php echo json_encode($_POST['my_post'] ?? null) ?>;

फिर सामान्य तरीके से जावास्क्रिप्ट चर का उपयोग करें।

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


12
उद्धरण / आदि से बचने / जोड़ने के लिए सावधान रहें। यदि आप इस मार्ग पर जाते हैं तो अपने POST डेटा पर। एक विकल्प json_encode () का उपयोग करना है, जो किसी भी डेटा प्रकार के लिए बहुत काम करेगा। उदाहरण: abeautifulsite.net/passing-data-from-php-to-javascript
claviska

अब इसे ही मैं सोच समझ कर बोलता हूं।
I.Am.A.Guy

यह सुनिश्चित करने के लिए यह सबसे सरल तरीका है। इसने मेरे लिए एक नया थीम पेज बनाकर वर्डप्रेस में काम किया और बस विंडो स्तर पर पोस्ट डेटा को उजागर किया जैसे कि window.my_prefix_post_data = <? Php echo $ _POST ['my_post']?>? और फिर पोस्ट डेटा को किसी भी दायरे से आसानी से एक्सेस कर सकता है। यह बहुत संवेदनशील पोस्ट डेटा के साथ उन साइटों के लिए अनुशंसित नहीं किया जाएगा जो हर समय रहते हैं, लेकिन हमारे पृष्ठ / साइट के दायरे के लिए यह बहुत अच्छा काम करता है।
OG सीन

2
यह व्यवहार्य नहीं है, चरित्र पलायन मुद्दा हो सकता है।
मथिउअक्लेयर

1
हैक कर लिया, पक्का। बचने के बिना उपरोक्त विधि का उपयोग न करें।
रेगी

10

जावास्क्रिप्ट एक क्लाइंट-साइड स्क्रिप्टिंग भाषा है, जिसका अर्थ है कि सभी कोड को वेब उपयोगकर्ता की मशीन पर निष्पादित किया जाता है। दूसरी ओर, POST चर, सर्वर पर जाते हैं और वहां रहते हैं। ब्राउज़र उन चर को जावास्क्रिप्ट वातावरण प्रदान नहीं करते हैं, और न ही किसी भी डेवलपर को उनसे जादुई रूप से होने की उम्मीद करनी चाहिए।

चूंकि ब्राउज़र POST डेटा तक पहुंचने से जावास्क्रिप्ट को बंद कर देता है, इसलिए PHP के बाहर के अभिनेता के बिना POST चरों को पढ़ना बहुत असंभव है जैसे कि PHP एक स्क्रिप्ट चर में POST मानों को गूंजता है या एक एक्सटेंशन / एडऑन जो ट्रांजिट में POST मानों को पकड़ता है। GET चर एक वर्कअराउंड के माध्यम से उपलब्ध हैं क्योंकि वे URL में हैं जो क्लाइंट मशीन द्वारा पार्स किए जा सकते हैं।


3
मैं दृढ़ता से आपके -1 से असहमत हूं। ओपी में कहीं भी सवाल AJAX को निर्दिष्ट नहीं करता है, जिससे लिंक क्लिक की संभावना खुल जाती है और जावास्क्रिप्ट द्वारा प्रदर्शन नहीं किए जाने वाले फॉर्म सबमिट हो जाते हैं। विशेष रूप से उत्तरार्द्ध एक उदाहरण है जहां POST चर मौजूद हैं, लेकिन क्लाइंट पक्ष पर उपलब्ध नहीं हैं, जब तक कि एक स्क्रिप्ट द्वारा सर्वर की प्रतिक्रिया उत्पन्न नहीं होती है और स्क्रिप्ट JS कोड में POST चर के मूल्यों को प्रतिध्वनित करने के लिए चुनाव करती है। अगर मैं -1 टिप्पणी कर सकता था, तो मैं करूंगा।
प्लैटिनम एज़्योर

2
मैं AJAX के बारे में बात नहीं कर रहा हूँ। मेरा तर्क POST अनुरोध के किसी भी रूप को संदर्भित करता है। ब्राउज़र HTTP अनुरोध के भाग के रूप में भेजे गए प्रत्येक पैरामीटर को जानता है, जिसमें अन्य, URL और POST पैरामीटर शामिल हैं। उन मापदंडों में से कुछ को जावास्क्रिप्ट के लिए उपलब्ध कराया जाता है अन्य नहीं हैं। यह केवल ब्राउज़र द्वारा लगाया गया प्रतिबंध है, यह बहुत अच्छी तरह से JS से POST पैरामेट्स को एक्सेस दे सकता है, लेकिन यह सरल सत्य नहीं है।
GetFree

1
तुम मेरी बात नहीं समझ रहे हो। कोई भी एक जावास्क्रिप्ट नहीं लिखेगा, जब तक कि सर्वर स्पष्ट रूप से उन्हें प्रदान नहीं करता है, POST चर उपलब्ध होने की उम्मीद है। यदि सर्वर उन्हें प्रदान नहीं करता है, तो जहां तक ​​एक वेब डेवलपर जावास्क्रिप्ट कोड लिखने का संबंध है, वे शायद क्लाइंट साइड पर बिल्कुल भी नहीं होंगे।
प्लैटिनम एज़्योर

1
आपके उत्तर में आप कहते हैं कि यह संभव नहीं है, जो सही है। लेकिन आप यह भी बताएं कि यह क्यों संभव नहीं है। वह स्पष्टीकरण गलत है। इसलिए आपको
गेटफ्री

3
मेरा स्पष्टीकरण अधूरा था, गलत नहीं। मैंने अपना उत्तर संपादित कर दिया है ताकि आप भी खुश रहें। यदि आप नहीं हैं, तो मुझे -1 देने और टिप्पणी करने के बजाय, इसे स्वयं संपादित करें।
प्लैटिनम एज़्योर

9

सेशनस्टोर का उपयोग करें!

$(function(){
    $('form').submit{
       document.sessionStorage["form-data"] =  $('this').serialize();
       document.location.href = 'another-page.html';
    }
});

दूसरे पेज पर:

var formData = document.sessionStorage["form-data"];

संदर्भ लिंक - https://developer.mozilla.org/en-US/docs/Web/API/Window/session/orage



क्या होगा यदि पोस्ट अनुरोध एक उपडोमेन या किसी अन्य डोमेन से आता है? गर्भाधान का भंडाफोड़ हुआ।
अपरिभाषित

यह होना चाहिएform.on('submit',function(){document.sessionStorage["form-data"] = $('this').serialize();window.location.href = 'another-page.html';})
जस्टिन लियू

@ZefirZdravkov आप एक कुकी सेट कर सकते हैं samesite = Noneऔर Secureइसलिए क्रोम इसका उपयोग करने की अनुमति देता है।
जस्टिन लियू

6

मूल्य निर्धारित करने के लिए लोकलस्टोरेज या किसी अन्य तरीके का उपयोग क्यों न करें जिसे आप पास करना चाहते हैं?

इस तरह आप कहीं से भी इसका उपयोग कर सकते हैं!

तक कहीं भी मेरा मतलब दिए गए डोमेन / संदर्भ में


2
सिर्फ एक साधारण कुकी क्यों नहीं?
jj_

1
क्या होगा यदि पोस्ट अनुरोध एक उपडोमेन या किसी अन्य डोमेन से आता है? गर्भाधान का भंडाफोड़ हुआ।
अपरिभाषित

@ZefirZdravkov, जबकि मैं दिए गए सीमा के अस्तित्व पर आपके साथ सहमत हूं, यह ब्राउज़र-आधारित सुरक्षा जांच के कारण मौजूद है। मैं केवल असीम डरावनी कल्पना कर सकता हूं अगर यह 'कोई भी साइट किसी भी अन्य की सामग्री को पढ़ सकती है' परिदृश्य।
इयान म्बे

@ कोई भी साइट वास्तव में CURL या Ajax के माध्यम से किसी भी अन्य सामग्री को पढ़ सकती है। अगर 'किसी अन्य साइट के लोकलस्टोरेज' का जिक्र किया जाए, तो, हां, यह घृणित होगा। मैं केवल यह कह रहा हूं कि यह उत्तर केवल तभी काम करेगा जब आप केवल इस डोमेन पर POST अनुरोध प्राप्त / भेज रहे हों। उदाहरण के लिए, एक POST अनुरोध जावास्क्रिप्ट cloudianos.comतक नहीं पहुंचेगा api.cloudianos.com, क्योंकि वे समान साझा नहीं करते हैं localStorage
अनिर्धारित

2

आप पोस्ट अनुरोध पैरामीटर को jQuery-PostCapture ( @ ssut / jQuery-PostCapture ) के साथ पढ़ सकते हैं ।

PostCapture प्लगइन कुछ ट्रिक्स से युक्त है।

जब आप सबमिट बटन पर क्लिक onsubmitकरेंगे , तो घटना को भेज दिया जाएगा।

समय पर, PostCapture प्रपत्र डेटा क्रमबद्ध हो जाएगा और html5 लोकलस्टोरेज (यदि उपलब्ध हो) या कुकी स्टोरेज को बचाएगा।


यह केवल एक ही डोमेन के बीच पोस्ट सबमिशन के लिए काम करेगा (सबडोमेन या तो काम नहीं करेगा)
अपरिभाषित

1

POST वह ब्राउज़र है जो क्लाइंट (आपके broswer) से वेब सर्वर पर भेजता है। पोस्ट डेटा को HTTP हेडर के माध्यम से सर्वर को भेजा जाता है, और यह क्लाइंट (आपके ब्राउज़र) से वेब-सर्वर तक केवल सर्वर के अंत में या पथ (उदाहरण: एक प्रॉक्सी सर्वर) के बीच में उपलब्ध होता है। इसलिए इसे जावास्क्रिप्ट की तरह क्लाइंट साइड स्क्रिप्ट से नियंत्रित नहीं किया जा सकता है। आपको सर्वर साइड स्क्रिप्ट जैसे CGI, PHP, Java आदि के माध्यम से इसे संभालने की आवश्यकता है। यदि आपको अभी भी जावास्क्रिप्ट में लिखने की आवश्यकता है, तो आपके पास एक वेब-सर्वर होना आवश्यक है, जो आपके सर्वर में Node.js की तरह जावास्क्रिप्ट को समझता और निष्पादित करता है।


1

यदि आप Java / REST API के साथ काम कर रहे हैं, तो वर्कअराउंड आसान है। JSP पेज में आप निम्न कार्य कर सकते हैं:

    <%
    String action = request.getParameter("action");
    String postData = request.getParameter("dataInput");
    %>
    <script>
        var doAction = "<% out.print(action); %>";
        var postData = "<% out.print(postData); %>";
        window.alert(doAction + " " + postData);
    </script>

1
<script>
<?php
if($_POST) { // Check to make sure params have been sent via POST
  foreach($_POST as $field => $value) { // Go through each POST param and output as JavaScript variable
    $val = json_encode($value); // Escape value
    $vars .= "var $field = $val;\n";
  }
  echo "<script>\n$vars</script>\n";
}
?>
</script>

या इसे एक शब्दकोष में डालने के लिए इसका उपयोग करें जिसे एक फ़ंक्शन पुनः प्राप्त कर सकता है:

<script>
<?php
if($_POST) {
  $vars = array();
  foreach($_POST as $field => $value) {
    array_push($vars,"$field:".json_encode($value)); // Push to $vars array so we can just implode() it, escape value
  }
  echo "<script>var post = {".implode(", ",$vars)."}</script>\n"; // Implode array, javascript will interpret as dictionary
}
?>
</script>

फिर जावास्क्रिप्ट में:

var myText = post['text'];

// Or use a function instead if you want to do stuff to it first
function Post(variable) {
  // do stuff to variable before returning...
  var thisVar = post[variable];
  return thisVar;
}

यह केवल एक उदाहरण है और इसका उपयोग किसी संवेदनशील डेटा जैसे पासवर्ड आदि के लिए नहीं किया जाना चाहिए । POST विधि एक कारण से मौजूद है; बैकएंड पर सुरक्षित रूप से डेटा भेजने के लिए, ताकि उद्देश्य को पराजित किया जा सके।

लेकिन अगर आपको /page?blah=value&bleh=value&blahbleh=valueअपने यूआरएल के बिना अपने अगले पृष्ठ पर जाने के लिए बस गैर-संवेदनशील फॉर्म डेटा का एक गुच्छा चाहिए , तो यह क्लीनर यूआरएल के लिए बना देगा और आपका जावास्क्रिप्ट तुरंत आपके POST डेटा के साथ बातचीत कर सकता है।


1

मेरे पास इसे बनाने के लिए एक सरल कोड है:

अपने index.php में:

<input id="first_post_data" type="hidden" value="<?= $_POST['first_param']; ?>"/>

अपने main.js में:

let my_first_post_param = $("#first_post_data").val();

इसलिए जब आप main.js को index.php ( <script type="text/javascript" src="./main.js"></script>) में शामिल करेंगे तो आपको अपने छिपे हुए इनपुट का मूल्य मिल सकता है जिसमें आपका पोस्ट डेटा है।


0

आप अपने पोस्ट वेरिएबल को पहले PHP के माध्यम से एनकोड करने के लिए 'json_encode' कर सकते हैं। फिर JSON एनकोडेड पोस्ट चर से एक JS ऑब्जेक्ट (सरणी) बनाएं। फिर उन चर को हेरफेर करने के लिए एक जावास्क्रिप्ट लूप का उपयोग करें ... जैसे - नीचे इस उदाहरण में - HTML फॉर्म फ़ॉर्म को पॉप्युलेट करने के लिए:

<script>

    <?php $post_vars_json_encode =  json_encode($this->input->post()); ?>

    // SET POST VALUES OBJECT/ARRAY
    var post_value_Arr = <?php echo $post_vars_json_encode; ?>;// creates a JS object with your post variables
    console.log(post_value_Arr);

    // POPULATE FIELDS BASED ON POST VALUES
    for(var key in post_value_Arr){// Loop post variables array

        if(document.getElementById(key)){// Field Exists
            console.log("found post_value_Arr key form field = "+key);
            document.getElementById(key).value = post_value_Arr[key];
        }
    }


</script>

0

एक विकल्प PHP में एक कुकी सेट करना है।

उदाहरण के लिए: 1 दिन में समाप्त होने के मूल्य के साथ अमान्य नाम की कुकी $invalid:

setcookie('invalid', $invalid, time() + 60 * 60 * 24);

फिर इसे जेएस में वापस पढ़ें ( जेएस कुकी प्लगइन का उपयोग करके ):

var invalid = Cookies.get('invalid');

if(invalid !== undefined) {
    Cookies.remove('invalid');
}

अब आप invalidजावास्क्रिप्ट में चर से मूल्य का उपयोग कर सकते हैं ।


0

यह निर्भर करता है कि आप जावास्क्रिप्ट के रूप में क्या परिभाषित करते हैं। आजकल हमारे पास सर्वर साइड प्रोग्राम जैसे NodeJS पर JS है। यह वास्तव में एक ही जावास्क्रिप्ट है जिसे आप अपने ब्राउज़र में कोड करते हैं, सर्वर भाषा के रूप में निष्पादित करते हैं। तो आप ऐसा कुछ कर सकते हैं: ( केसी चु द्वारा कोड: https://stackoverflow.com/a/4310087/5698805 )

var qs = require('querystring');

function (request, response) {
    if (request.method == 'POST') {
        var body = '';

        request.on('data', function (data) {
            body += data;

            // Too much POST data, kill the connection!
            // 1e6 === 1 * Math.pow(10, 6) === 1 * 1000000 ~~~ 1MB
            if (body.length > 1e6)
                request.connection.destroy();
        });

        request.on('end', function () {
            var post = qs.parse(body);
            // use post['blah'], etc.
        });
    }
}

और इसके उपयोग post['key'] = newVal;आदि ...


-1

POST चर केवल ब्राउज़र के लिए उपलब्ध होते हैं यदि उसी ब्राउज़र ने उन्हें पहले स्थान पर भेजा हो। यदि कोई अन्य वेबसाइट POST के माध्यम से किसी अन्य URL में सबमिट होती है, तो ब्राउज़र को POST डेटा नहीं आएगा।

SITE A: में POST SITE B का उपयोग करते हुए एक बाहरी URL (साइट B) के लिए एक फॉर्म सबमिट किया जाता है: आगंतुक को प्राप्त होगा लेकिन केवल गेट चर के साथ


-1
function getParameterByName(name, url) {
            if (!url) url = window.location.href;
            name = name.replace(/[\[\]]/g, "\\$&");
            var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
                results = regex.exec(url);
            if (!results) return null;
            if (!results[2]) return '';
            return decodeURIComponent(results[2].replace(/\+/g, " "));
        }
var formObj = document.getElementById("pageID");
formObj.response_order_id.value = getParameterByName("name");

यह GET वैरिएबल है, OP ने विशेष रूप से POST var के लिए कहा और नोट किया कि उसके पास पहले से ही GET वैरिएबल हैं।
ओजी सीन

-3
$(function(){
    $('form').sumbit{
        $('this').serialize();
    }
});

JQuery में, उपरोक्त कोड आपको URL में POST मापदंडों के साथ URL स्ट्रिंग देगा। POST मापदंडों को निकालना असंभव नहीं है।

JQuery का उपयोग करने के लिए , आपको jQuery लाइब्रेरी को शामिल करना होगा। उसके लिए निम्नलिखित का उपयोग करें:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js" type="text/javascript"></script>

4
यह केवल उस पृष्ठ पर POST पैरामीटर प्राप्त करेगा जहां से फार्म जमा किया जा रहा है । ऐसा लगता है कि ओपी जिस पृष्ठ पर फॉर्म सबमिट किया गया था उस पर POST पैरामीटर प्राप्त करना चाहता है एक सुरक्षित धारणा है । ऐसा करना असंभव है।
जॉन वाशम

-3

हम POST का उपयोग करके सबमिट किए गए फॉर्म पैरामेट्स का उपयोग करके एकत्र कर सकते हैं क्रमबद्ध अवधारणा ।

इसे इस्तेमाल करे:

$('form').serialize(); 

बस इसे सतर्क करें, यह छिपे हुए सहित सभी मापदंडों को प्रदर्शित करता है।


-4
<head><script>var xxx = ${params.xxx}</script></head>

ईएल एक्सप्रेशन $ {param.xxx} का उपयोग करके <head>पोस्ट मेथड से परमर्स प्राप्त कर सकते हैं, और सुनिश्चित करें कि js फाइल को शामिल किया गया है <head>ताकि आप अपनी js फाइल में सीधे 'xxx' जैसे एक परम को हैंडल कर सकें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.