GET এর পরিবর্তে একটি লিঙ্ক POST ব্যবহার করুন


204

আমি নিশ্চিত না এটি এমনকি সম্ভব কিনা। তবে আমি ভাবছিলাম যে হাইপারলিংক কীভাবে কিছু ভেরিয়েবল পাস করতে এবং জিইটির বিপরীতে পোষ্ট (ফর্মের মতো) ব্যবহার করতে হয় তা যদি কেউ জানে।


এইচটিএমএল এটি করতে পারে না। জাভাস্ক্রিপ্ট লিঙ্কের ক্লিক ইভেন্টটি ধরতে পারে এবং আপনি যদি HTML এবং সিএসএস পরিবর্তন করতে না পারেন তবে লিঙ্কগুলির মতো বোতামের মতো স্টাইল করতে পারেন যা আপনি চান তা করতে পারে it's
sylvain

উত্তর:


98

আপনি লুকানো ইনপুট সহ একটি ফর্ম তৈরি করেন যা পোস্ট করা মানগুলিকে ধারণ করে, গন্তব্য url এ ফর্মটির ক্রিয়া সেট করে , এবং ফর্ম পদ্ধতি পোস্ট করতে । তারপরে, আপনার লিঙ্কটি ক্লিক করা হলে, ফর্মটি জমা দেয় এমন একটি জেএস ফাংশন ট্রিগার করুন।

উদাহরণস্বরূপ এখানে দেখুন । এই উদাহরণটি বিশুদ্ধ জাভাস্ক্রিপ্ট ব্যবহার করে, কোনও jQuery ছাড়াই - আপনি যদি ইতিমধ্যে আপনার চেয়ে আরও কিছু ইনস্টল না করতে চান তবে আপনি এটি চয়ন করতে পারেন।

<form name="myform" action="handle-data.php" method="post">
  <label for="query">Search:</label>
  <input type="text" name="query" id="query"/>
  <button>Search</button>
</form>

<script>
var button = document.querySelector('form[name="myform"] > button');
button.addEventListener(function() {
  document.querySelector("form[name="myform"]").submit();
});
</script>

16
কেন এটি গৃহীত উত্তর? জিইটির বিপরীতে প্রশ্নটি বিশেষত পোষ্ট (যেমন একটি ফর্মের মতো) ব্যবহারের জন্য জিজ্ঞাসা করে , তবুও এই উত্তরটি বলে " গন্তব্য url এবং পাওয়ার পদ্ধতিতে পদক্ষেপ দিন "।
মজিদ ফৌলদপুর

3
আমি তা পেয়েছি আমি যা বুঝতে পারি না তা হ'ল: আমরা একটি লুকানো ফর্ম তৈরির সমস্যায় পড়ি যাতে আমরা পোস্ট করতে পারি তবে ফর্মটি তৈরি হওয়ার পরে, আপনি কেন এই পদ্ধতিটি সেট করার প্রস্তাব দিচ্ছেন GET? আমরা getফর্ম ছাড়া ছিল , তাই না?
মজিদ ফৌলদপুর

3
তুমি ঠিক. এটি একটি ত্রুটি ছিল, তবে কোনওভাবে ওপি এখনও এটি সঠিকভাবে পেয়েছে (সম্ভবত অন্তর্ভুক্ত লিঙ্কটির কারণে যা আরও পরিষ্কার)। নির্দেশ করার জন্য ধন্যবাদ। আমি সম্পূর্ণরূপে reprassed।
পালাটিয়ার

3
আরও আধুনিক পদ্ধতির ব্যবহার করতে আমি আপনার উত্তর আপডেট করেছি। যদি আপনি দ্বিমত পোষণ করেন তবে নির্দ্বিধায় এই সম্পাদনাটি রোলব্যাক করুন।
মিশা পেরেকোভস্কি

3
এই প্রক্রিয়াটিতে জাভাস্ক্রিপ্ট জড়িত হওয়ার কোনও কারণ নেই। কেন এটি গৃহীত উত্তর?
শ্যাকার

322

এর জন্য আপনার জাভাস্ক্রিপ্টের দরকার নেই। শুধু যে পরিষ্কার বর্ণনা করে দিতে, যেহেতু সময় যেমন এই উত্তর পোস্ট করা হয়েছে, চেয়েছিলেন সব এই প্রশ্নের উত্তর কিছু উপায় বা অন্য জাভাস্ক্রিপ্ট ব্যবহার জড়িত।

আপনি জমা দিতে চান এমন ডেটাযুক্ত গোপন ক্ষেত্রগুলি সহ একটি ফর্ম তৈরি করে খাঁটি এইচটিএমএল এবং সিএসএসের সাহায্যে এটি সহজেই করতে পারেন, তারপরে কোনও লিঙ্কের মতো দেখতে ফর্মের জমা বোতামটি স্টাইলিং করুন।

উদাহরণ স্বরূপ:

.inline {
  display: inline;
}

.link-button {
  background: none;
  border: none;
  color: blue;
  text-decoration: underline;
  cursor: pointer;
  font-size: 1em;
  font-family: serif;
}
.link-button:focus {
  outline: none;
}
.link-button:active {
  color:red;
}
<a href="some_page">This is a regular link</a>

<form method="post" action="some_page" class="inline">
  <input type="hidden" name="extra_submit_param" value="extra_submit_value">
  <button type="submit" name="submit_param" value="submit_value" class="link-button">
    This is a link that sends a POST request
  </button>
</form>

আপনার সাইটের সঠিক লিঙ্কগুলি কীভাবে আপনার সাইটে নিয়মিত লিঙ্কগুলি স্টাইল করা হয়েছে তার উপর নির্ভর করে আলাদা হতে পারে।


4
সম্মত হয়। আমার একটি ইমেলের মাধ্যমে এটি করার একটি উপায় প্রয়োজন, যাতে জেএস আমার পক্ষে খুব একটা বিকল্প ছিল না। এটি পুরোপুরি কাজ করা উচিত
SynackSA

7
আমি কেবল এটি একবারে উপবিষ্ট করতে সক্ষম। এটি প্রায় যতই দুঃখজনক যে সত্য যে এইচটিএমএল প্রশ্নগুলির 99,728% জাভাস্ক্রিপ্ট বা jQuery সমস্যার সাথে বিভ্রান্ত হবে।
রব

3
এটি নিশ্চিতভাবেই কোনও লিঙ্কের মতো দেখতে এমন বোতামটি ব্যবহার করার সহজ উপায়, তবে এটি আসলে হার্ড-কোডিং। এই বোতামটি যে পরিস্থিতিতে চলেছে এবং ঠিক তা প্রতিটি ক্ষেত্রেই তাদেরকে সুস্পষ্টভাবে সেট করতে হবে আপনাকে ঠিক জানতে হবে। আমি মনে করি যে জেএস / জেকিউয়েরির উপর ভিত্তি করে দেওয়া উত্তরগুলি আরও জেনেরিক যেহেতু তারা লিঙ্ক উপাদানটি নিজেই ব্যবহার করছে (বা যে কোনও উপাদান)।
মাকিসএইচ

2
@ আজেদী 32 দুঃখিত, আমার মন্তব্যটি এতটা পরিষ্কার ছিল না: আমি মূলত বলার চেষ্টা করি যে << এলিমেন্টের মতো দেখতে এই বোতামটি বিশেষভাবে স্টাইল করা হয়েছে। তবে আপনি যদি অন্য <a> উপাদানগুলির বিভিন্ন ধরণের যেমন পৃষ্ঠার বিভিন্ন অংশে বোতামটি রেখে থাকেন তবে আপনাকে <a> এর সমস্ত সিএসএস বিধি নকল করতে হবে, বোতামটির জন্য হোভার, ভিজিট ইত্যাদির বিধি তৈরি করতে হবে for অন্যথায় এটি অবশ্যই কাজটি করবে তবে এটি দেখতে কুৎসিত দেখাবে। অন্য সমাধানগুলির সাথে আপনার কেবল কোনও সিএসএস পরিবর্তন করার দরকার নেই, আপনি ইতিমধ্যে আপনার কাছে থাকা অন্য সমস্তগুলির মতো একটি <a> উপাদান পাবেন। অবশ্যই খাঁটি এইচটিএমএল এর কিছু সুবিধা রয়েছে।
মাকিশ এইচ

1
@ রবার্ট এএফাইক, অন্য প্রস্তাবিত সমাধানগুলির মধ্যে কোনওটিই মিডল-ক্লিকের সাথে কাজ করে না। আপনি যদি সত্যিই পেডেন্টিক হতে চান তবে আপনি বলতে পারেন যে কোনও লিঙ্কের সাথে একটি পোষ্ট অনুরোধ জমা দেওয়া অসম্ভব। আপনি কেবল ফর্ম এবং জাভাস্ক্রিপ্ট সহ পোষ্ট অনুরোধ জমা দিতে পারেন।
Ajedi32

48

আপনি জাভাস্ক্রিপ্ট ফাংশন ব্যবহার করতে পারেন। আপনি যদি এটি ব্যবহার করার সিদ্ধান্ত নেন তবে JQuery এর একটি সুন্দর পোস্ট ফাংশন রয়েছে:

JQuery পোস্ট

<script language="javascript"> 

   function DoPost(){
      $.post("WhateverPage.php", { name: "John", time: "2pm" } );  //Your values here..
   }

</script>


<a href="javascript:DoPost()">Click Here</A> 

5
এটি পোষ্ট অনুরোধ হিসাবে অনুরোধ করে না, কিন্তু আমি এটি ব্যবহার করতে পারিনি কারণ আমার এখনও "যাইহোক.এফপি" লোকেশনটিতে যেতে হবে।
ক্রিস

6
$.post('page.php', {param: 1}, function() { window.location.href = 'page'.php' });
জের্ম

1
@mplungjan সূরা বলছেন যেখানে লিংক উল্লেখ করা হয়, যখন আমি সম্মত এটা গুলিয়ে ফেলেন আচরণ এবং বিষয়বস্তু ভুল যে, এই ক্ষেত্রে জাভাস্ক্রিপ্ট হয় রেফারেন্স। অন্য কথায় "আপনি যখন লিঙ্কটি ক্লিক করবেন তখন এটি জাভাস্ক্রিপ্ট ব্যবহার করে একটি পোস্টব্যাক সম্পাদন করবে"। একটি ক্লিক ইভেন্ট বাঁধাইয়ের চেয়ে এটির আরও অর্থ রয়েছে। "Href এ কখনও জাভাস্ক্রিপ্ট ব্যবহার করবেন না" এর মতো কঠোর নিয়মগুলি অন্য কোনও খারাপ অভ্যাসের মতোই খারাপ are
মেনল

@ মেনোল আমি বলেছি: প্রস্তাবিত নয়। - "কখনও ব্যবহার করবেন না"। আপনি যদি সত্যিই চান তবে তা করতে <a href="whyjavascript.html" id="postIt">Click Here</a>এবং করতে পারেন$("#postIt").on("click",function(e) { e.preventDefault(); $.post("WhateverPage.php", { name: "John", time: "2pm" } ); });
এমপি্লুঞ্জন

1
@ এমপ্লুংজন যে বিভ্রান্তিকর সামগ্রী / আচরণ এড়াতে অন্য যেগুলির মতো সুপারিশ চালু করা হয়েছে। যখন এর প্রস্তাবিত সুযোগের বাইরে কোনও ক্ষেত্রে সুপারিশটি সামনে আনা হয় তখন এটি একটি কঠোর নিয়ম হিসাবে উপস্থিত হতে শুরু করে। উদাহরণস্বরূপ আপনি প্রদর্শিত হয় একটি অতিরিক্ত মাইল যেতে দিলেন মাত্র উপর হতে "নিয়ম" এর নিরাপদ পাশ তাই Noone ভবিষ্যতে প্রোগ্রামার দোষারোপ করতে পারেন কিন্তু এই নিরাপত্তা পাঠযোগ্যতা এবং অর্থ খরচে এটা করা যায়। এটি ঠিক কীভাবে এটি অন্য বাস্তববাদী বিকাশকারীকে প্রদর্শিত হয় তবে আমি নিশ্চিত যে আপনি এটি বোঝাতে পারেন নি।
মেনল

24

এটি একটি পুরানো প্রশ্ন, তবে কোনও উত্তরই পুরোপুরি অনুরোধটি পূরণ করে না। সুতরাং আমি অন্য উত্তর যুক্ত করছি।

অনুরোধ করা কোডটি, যেমনটি আমি বুঝতে পেরেছি, সাধারণ হাইপারলিঙ্কগুলি যেভাবে কাজ করে তাতে কেবল একটি পরিবর্তন করা POSTউচিত : পরিবর্তে পদ্ধতিটি ব্যবহার করা উচিত GET। তাত্ক্ষণিক প্রভাবগুলি হ'ল:

  1. লিঙ্কটি ক্লিক করা হলে আমাদের ইউআরএলে ট্যাবটি পুনরায় লোড করা উচিত href
  2. পদ্ধতিটি পোস্ট হওয়ার কারণে, আমরা যে টার্গেট পৃষ্ঠাটি লোড করব তার URL এ আমাদের কাছে কোনও কোয়েরি স্ট্রিং থাকা উচিত নয়
  3. এই পৃষ্ঠাটির দ্বারা পরামিতিগুলিতে (নাম এবং মান) ডেটা পাওয়া উচিত POST

আমি এখানে jquery ব্যবহার করছি, কিন্তু এটি নেটিস এপিআইএস দিয়ে করা যেতে পারে (আরও কঠিন এবং অবশ্যই)।

<html>
<head>
    <script src="path/to/jquery.min.js" type="text/javascript"></script>
    <script>
        $(document).ready(function() {

            $("a.post").click(function(e) {
                e.stopPropagation();
                e.preventDefault();
                var href = this.href;
                var parts = href.split('?');
                var url = parts[0];
                var params = parts[1].split('&');
                var pp, inputs = '';
                for(var i = 0, n = params.length; i < n; i++) {
                    pp = params[i].split('=');
                    inputs += '<input type="hidden" name="' + pp[0] + '" value="' + pp[1] + '" />';
                }
                $("body").append('<form action="'+url+'" method="post" id="poster">'+inputs+'</form>');
                $("#poster").submit();
            });
        });
    </script>
</head>
<body>
    <a class="post" href="reflector.php?color=blue&weight=340&model=x-12&price=14.800">Post it!</a><br/>
    <a href="reflector.php?color=blue&weight=340&model=x-12&price=14.800">Normal link</a>
</body>
</html>

এবং ফলাফলটি দেখতে, নিম্নলিখিত ডিরেক্টরিটিকে একই রূপে প্রতিচ্ছবি হিসাবে সংরক্ষণ করুন ph

<h2>Get</h2>
<pre>
<?php print_r($_GET); ?>
</pre>

<h2>Post</h2>
<pre>
<?php print_r($_POST); ?>
</pre>

12

পোস্টের অনুরূপ পদ্ধতির ব্যবহার করে আরেকটি কার্যকারী উদাহরণ: একটি এইচটিএমএল ফর্ম তৈরি করুন, পোস্টটি অনুকরণ করার জন্য জাভাস্ক্রিপ্ট ব্যবহার করুন। এটি 2 টি কাজ করে: একটি নতুন পৃষ্ঠায় ডেটা পোস্ট করুন এবং এটি একটি নতুন উইন্ডো / ট্যাবে খুলুন।

এইচটিএমএল

<form name='myForm' target="_blank" action='newpage.html' method='post'>
<input type="hidden" name="thisIsTheParameterName" value="testDataToBePosted"/>
</form>

জাভাস্ক্রিপ্ট

document.forms["myForm"].submit();

3

এইচটিএমএল + জ্যাকুয়ারি : একটি লিঙ্ক যা পোস্টের সাথে একটি লুকানো ফর্ম জমা দেয়।

যেহেতু আমি এই সমস্ত উত্তরগুলি বোঝার জন্য অনেক সময় ব্যয় করেছি এবং যেহেতু তাদের সবার কিছু আকর্ষণীয় বিশদ রয়েছে, তাই এখানে সম্মিলিত সংস্করণ যা শেষ পর্যন্ত আমার পক্ষে কাজ করেছে এবং যা এর সরলতার জন্য আমি পছন্দ করি।

আমার দৃষ্টিভঙ্গি আবার কোনও লুকানো ফর্ম তৈরি করা এবং পৃষ্ঠার অন্য কোনও লিঙ্কে ক্লিক করে এটি জমা দেওয়া। পৃষ্ঠার মূল অংশে ফর্মটি কোথায় রাখা হবে তা বিবেচ্য নয়।

ফর্মের জন্য কোড:

<form id="myHiddenFormId" action="myAction.php" method="post" style="display: none">
  <input type="hidden" name="myParameterName" value="myParameterValue">
</form>

বর্ণনা:

display: noneফর্ম লুকিয়ে রাখে। আপনি বিকল্পভাবে এটি একটি ডিভ বা অন্য কোনও উপাদানটিতে display: noneরেখে উপাদানটিতে সেট করতে পারেন ।

type="hidden"একটি fild যে দেখানো হবে না তৈরি করবে কিন্তু তার ডেটা কর্ম eitherways (প্রেরিত হবে W3C এর দেখতে )। আমি বুঝতে পারি যে এটি সহজতম ইনপুট প্রকার।

লিঙ্কের জন্য কোড:

<a href="" onclick="$('#myHiddenFormId').submit(); return false;" title="My link title">My link text</a>

বর্ণনা:

খালি hrefকেবল একই পৃষ্ঠাটিকে লক্ষ্য করেreturn falseব্রাউজারটি লিঙ্কটি অনুসরণ করা বন্ধ করে দেবে, তবে এই ক্ষেত্রে এটি আসল বিষয় নয় । আপনি অবশ্যই এই আচরণটি পরিবর্তন করতে চাইতে পারেন। আমার নির্দিষ্ট ক্ষেত্রে, ক্রিয়াটির শেষে একটি পুনঃনির্দেশ অন্তর্ভুক্ত।

onclickব্যবহার এড়িয়ে ব্যবহৃত হয় href="javascript:..."যেমন mplungjan দ্বারা লক্ষনীয়$('#myHiddenFormId').submit();(পরিবর্তে একটি ফাংশন সংজ্ঞায়িত, যেহেতু কোড খুবই ছোট) ফর্ম জমা দিতে ব্যবহার করা হয়েছিল।

এই লিঙ্কটি অন্য যে কোনও <a>উপাদানগুলির মতো দেখতে হবে । আপনি প্রকৃতপক্ষে অন্য কোনও উপাদান ব্যবহার করতে পারেন <a>(উদাহরণস্বরূপ কোনও <span>বা কোনও চিত্র)।


2

আপনি এই jQuery ফাংশন ব্যবহার করতে পারেন

function makePostRequest(url, data) {
    var jForm = $('<form></form>');
    jForm.attr('action', url);
    jForm.attr('method', 'post');
    for (name in data) {
        var jInput = $("<input>");
        jInput.attr('name', name);
        jInput.attr('value', data[name]);
        jForm.append(jInput);
    }
    jForm.submit();
}

জেএসফিডেলের একটি উদাহরণ এখানে রয়েছে ( http://jsfiddle.net/S7zUm/ )


@ দাওল্যাম কোডটি আসলে কাজ করে। আমি পিপ্রেফের মানটির জন্য leserged.free.fr/phpinfo.php প্রতিস্থাপন করেছি এবং এটি সেই ফর্মটি সেই মানগুলিতে পাস করার জন্য পোস্ট করেছে।
জেএসউইলসন

2

অনেকগুলি পোস্টে উল্লিখিত হিসাবে, এটি সরাসরি সম্ভব নয়, তবে একটি সহজ এবং সফল উপায় নিম্নরূপ: প্রথমটি, আমরা আমাদের এইচটিএমএল পৃষ্ঠার শরীরে একটি ফর্ম রাখি, যার জমা দেওয়ার জন্য কোনও বোতাম নেই, এবং এর ইনপুটগুলিও লুকিয়ে আছে তারপরে আমরা ডেটা পেতে জাভাস্ক্রিপ্ট ফাংশন ব্যবহার করি এবং ফর্মটি প্রেরণ করি। এই পদ্ধতির সুবিধাগুলির মধ্যে একটি হ'ল অন্য পৃষ্ঠাগুলিতে পুনর্নির্দেশ করা, যা সার্ভার-সাইড কোডের উপর নির্ভর করে। কোডটি নিম্নরূপ: এবং এখন যে কোনও জায়গায় আপনার "পোস্ট" পদ্ধতিতে থাকা দরকার:

<script type="text/javascript" language="javascript">
function post_link(data){

    $('#post_form').find('#form_input').val(data);
    $('#post_form').submit();
};
</script>

   <form id="post_form" action="anywhere/you/want/" method="POST">
 {% csrf_token %}
    <input id="form_input" type="hidden" value="" name="form_input">
</form>

<a href="javascript:{}" onclick="javascript:post_link('data');">post link is ready</a>

1

আমি পৃষ্ঠায় HTML কোডিং ছাড়াই আরও গতিশীল পদ্ধতির পরামর্শ দিচ্ছি, একে কঠোরভাবে জেএস রাখুন:

$("a.AS-POST").on('click', e => {
  e.preventDefault()
  let frm = document.createElement('FORM')
  frm.id='frm_'+Math.random()
  frm.method='POST'
  frm.action=e.target.href
  document.body.appendChild(frm)
  frm.submit()
})

0

জাভাস্ক্রিপ্ট ব্যবহার করার পরিবর্তে, আপনি একটি লুকানো ফর্ম প্রেরণকারী একটি লেবেলও ব্যবহার করতে পারেন। খুব সহজ এবং ছোট সমাধান। লেবেলটি আপনার এইচটিএমএলের যে কোনও জায়গায় থাকতে পারে।

<form style="display: none" action="postUrl" method="post">
  <button type="submit" id="button_to_link"> </button>
</form>
<label style="text-decoration: underline" for="button_to_link">  link that posts </label>


-1

এটি আপনাকে সাহায্য করবে এটি পরীক্ষা করে দেখুন

$().redirect('test.php', {'a': 'value1', 'b': 'value2'});

2
আপনার উল্লেখ করা উচিত যে এই সমাধানটির জন্য নিম্নলিখিত লাইব্রেরিটি দরকার: github.com/mgalante/jquery.redirect
ফেলিক্স জি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.