উইন্ডো.লোকেশন.ইরেফ সহ পোস্ট ডেটা পাস করুন


113

উইন্ডো.লোকেশন.আরএফ ব্যবহার করার সময়, আমি যে নতুন পৃষ্ঠাটি খুলছি তার জন্য পোস্টের ডেটাটি দিতে চাই। এটি কি জাভাস্ক্রিপ্ট এবং jQuery ব্যবহার করে সম্ভব?


11
সেটিং window.location.hrefনতুন URL এর জন্য জিইটি অনুরোধ করে, পোষ্ট নয়।
চেতন এস

উত্তর:


85

window.location.hrefএটি ব্যবহার করে কোনও পোষ্ট অনুরোধ পাঠানো সম্ভব নয় not

আপনাকে যা করতে হবে তা হ'ল formএটিতে ডেটা ফিল্ড সহ একটি ট্যাগ সেট আপ করা, actionফর্মটির methodবৈশিষ্ট্যটি ইউআরএলে সেট করুন এবং বৈশিষ্ট্যটি POST এ সেট করুন, তারপরে ট্যাগটিতে submitপদ্ধতিটি কল করুন form


আমার কাছে 3 টি বিভিন্ন ফর্ম থেকে ডেটা আসছে এবং আমি 3 টি ফর্ম একই পৃষ্ঠায় প্রেরণ করার চেষ্টা করছি তাই আমি jQuery দিয়ে ফর্মগুলি সিরিয়ালায়িত করার চেষ্টা করেছি এবং তাদের অন্য কোনও উপায়ে পাঠানোর চেষ্টা করছি
ব্রায়ান

@ ব্রায়ান: আপনি কি formসব কিছু একসাথে রাখতে পারবেন না , তাই সবকিছু স্বয়ংক্রিয়ভাবে একসাথে প্রেরণ করা যায়?
মার্সেল করপেল

একটি ফর্ম একটি jQueryUI ডায়ালগ বাক্সে রয়েছে - সুতরাং আমি কেবল তাদের সমস্তটি অন্তর্ভুক্ত করতে পারি না।
ব্রায়ান

12
তাদের সমস্ত মানগুলি টেনে আনুন, তিনটি ফর্মের মধ্যে সমস্ত ক্ষেত্রের সাথে গতিশীলভাবে একটি ফর্ম তৈরি করুন এবং এই ফর্মটি জমা দিন। ফর্মটি অদৃশ্য হতে পারে। কোনও জিকুয়েরি এজেএক্স পদ্ধতি ব্যবহার করবেন না, ব্যবহার করুন $("#myForm").submit()। ফর্ম- যা অদৃশ্য হয়ে থাকবে এবং কেবলমাত্র আপনার ক্লায়েন্টের সাইড কোড থেকে মান জমা দেওয়ার জন্য ব্যবহৃত হবে, ব্যবহারকারীর ইনপুট নয়- প্রদর্শিত হবে না অন্যথায় ব্যবহৃত হবে না এবং পৃষ্ঠাটি রিফ্রেশ হবে।
ম্যাট লুঙ্গো

79

আপনার এইচটিএমএলে একটি ফর্ম যুক্ত করুন: এরকম কিছু:

<form style="display: none" action="/the/url" method="POST" id="form">
  <input type="hidden" id="var1" name="var1" value=""/>
  <input type="hidden" id="var2" name="var2" value=""/>
</form>

এবং এই মানগুলি পূরণ করতে JQuery ব্যবহার করুন (অবশ্যই আপনি অনুরূপ কিছু করতে জাভাস্ক্রিপ্ট ব্যবহার করতে পারেন)

$("#var1").val(value1);
$("#var2").val(value2);

তারপরে অবশেষে ফর্মটি জমা দিন

$("#form").submit();

সার্ভারের পাশ দিয়ে আপনি যাচাই করে আপনার প্রেরিত ডেটা পেতে সক্ষম হবেন var1এবং এটি var2কীভাবে করবেন তা আপনি কী সার্ভার-সাইডের ভাষা ব্যবহার করছেন তার উপর নির্ভর করে।


আমি যখন এটি করি, তখন আমি আমার ব্রাউজারটি ডোমেনে / অপরিজ্ঞাতভাবে পুনর্নির্দেশ করতে পাই। আমি কি ভুল করছি?
ভিগামেজে


9

যেমনটি অন্যান্য উত্তরে বলা হয়েছিল যে উইন্ডো.লোকেশন.href ব্যবহার করে কোনও পোষ্ট অনুরোধ করার কোনও উপায় নেই, এটি করার জন্য আপনি একটি ফর্ম তৈরি করতে এবং তা সঙ্গে সঙ্গে জমা দিতে পারেন submit

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

function postForm(path, params, method) {
    method = method || 'post';

    var form = document.createElement('form');
    form.setAttribute('method', method);
    form.setAttribute('action', path);

    for (var key in params) {
        if (params.hasOwnProperty(key)) {
            var hiddenField = document.createElement('input');
            hiddenField.setAttribute('type', 'hidden');
            hiddenField.setAttribute('name', key);
            hiddenField.setAttribute('value', params[key]);

            form.appendChild(hiddenField);
        }
    }

    document.body.appendChild(form);
    form.submit();
}

postForm('mysite.com/form', {arg1: 'value1', arg2: 'value2'});

https://stackoverflow.com/a/133997/2965158


8

সংক্ষিপ্ত উত্তর: না। window.location.hrefPOST ডেটা পাস করতে সক্ষম নয়।

কিছুটা সন্তোষজনক উত্তর: আপনি আপনার ফর্মের সমস্ত ডেটা ক্লোন করে জমা দিতে এই ফাংশনটি ব্যবহার করতে পারেন।

var submitMe = document.createElement("form");
submitMe.action = "YOUR_URL_HERE"; // Remember to change me
submitMe.method = "post";
submitMe.enctype = "multipart/form-data";
var nameJoiner = "_";
// ^ The string used to join form name and input name
//   so that you can differentiate between forms when
//   processing the data server-side.
submitMe.importFields = function(form){
    for(k in form.elements){
        if(input = form.elements[k]){
            if(input.type!="submit"&&
                     (input.nodeName=="INPUT"
                    ||input.nodeName=="TEXTAREA"
                    ||input.nodeName=="BUTTON"
                    ||input.nodeName=="SELECT")
                     ){
                var output = input.cloneNode(true);
                output.name = form.name + nameJoiner + input.name;
                this.appendChild(output);
            }
        }
    }
}
  • আপনি submitMe.importFields(form_element);যে তিনটি ফর্ম জমা দিতে চান তার প্রতিটি করুন।
  • এই ফাংশনটি (তার সন্তান ইনপুট নামের প্রতিটি ফরমের নাম যোগ হবে আপনি একটি থাকে তাহলে <input name="email"><form name="login">, পেশ নাম হবে login_name
  • আপনি nameJoinerভেরিয়েবল ব্যতীত অন্য কিছুতে পরিবর্তন করতে পারেন_ সুতরাং এটি আপনার ইনপুট নামকরণ প্রকল্পের সাথে বিরোধ নয়।
  • একবার আপনি সমস্ত প্রয়োজনীয় ফর্মগুলি আমদানি করার পরে, করুন submitMe.submit();

4

এটি এই হিসাবে সহজ

$.post({url: "som_page.php", 
    date: { data1: value1, data2: value2 }
    ).done(function( data ) { 
        $( "body" ).html(data);
    });
});

আমার অ্যাপ্লিকেশনটির স্ক্রিন লক তৈরি করতে আমাকে এটি সমাধান করতে হয়েছিল যেখানে আমাকে ব্যবহারকারী হিসাবে সংবেদনশীল ডেটা এবং যেখানে তিনি কাজ করছিলেন তা পাস করতে হয়েছিল। তারপরে একটি ফাংশন তৈরি করুন যা এই কোডটি কার্যকর করে


1
অথবা done()ফাংশন সেটেwindow.location.href
ক্রিস এডওয়ার্ডস

হ্যাঁ @ ক্রিস এডওয়ার্ডস, আমার উদাহরণে আমি jquery পোস্ট থেকে ডে রিটার্ন ডেটা ব্যবহার করার চেষ্টা করি। আমি আশা করি এটি কারও কাজে লাগবে।
সেরজিও রোলডান

3

আপনি কি কেবল স্থানীয় / সেশন স্টোরেজ ব্যবহার করে বিবেচনা করেছেন? - বা- আপনি যা নির্মাণ করছেন তার জটিলতার উপর নির্ভর করে; আপনি এমনকি indexDB ব্যবহার করতে পারেন।

দ্রষ্টব্য :

Local storageএবং indexDBসুরক্ষিত নয় - সুতরাং আপনি যে কোনও সংবেদনশীল / ব্যক্তিগত ডেটা (যেমন নাম, ঠিকানা, ইমেল ঠিকানা, ডিওবি ইত্যাদি) সংরক্ষণ করা এড়াতে চান।

Session Storage সংবেদনশীল যে কোনও কিছুর জন্য এটি আরও সুরক্ষিত বিকল্প, এটি কেবলমাত্র উত্সটিতে অ্যাক্সেসযোগ্য যা আইটেমগুলি সেট করে এবং ব্রাউজার / ট্যাব বন্ধ হওয়ার সাথে সাথে এটি পরিষ্কার হয়ে যায়।

IndexDB কিছুটা বেশি [তবে বেশি কিছু নয়] জটিল এবং এটি একটি a 30MB noSQL database প্রতিটি ব্রাউজারে অন্তর্নির্মিত (তবে ব্যবহারকারী যদি অনিচ্ছুক হন তবে এটি মূলত সীমাহীন হতে পারে) -> পরের বার আপনি গুগল ডক্স ব্যবহার করছেন, আপনাকে দেবটুলগুলি খুলুন -> অ্যাপ্লিকেশন -> সূচক ডিবি এবং একটি শিখর নিতে। [স্পয়লার সতর্কতা: এটি এনক্রিপ্ট করা হয়েছে]।

উপর দৃষ্টি নিবদ্ধ করা Localএবং Session Storage; এগুলি উভয়ই মরার ব্যবহার সহজ:

// To Set 
sessionStorage.setItem( 'key' , 'value' );

// e.g.
sessionStorage.setItem( 'formData' , { name: "Mr Manager", company: "Bluth's Frozen Bananas", ...  } );    

// Get The Data 
const fromData = sessionStorage.getItem( 'key' );     

// e.g. (after navigating to next location)
const fromData = sessionStorage.getItem( 'formData' );

// Remove 
sessionStorage.removeItem( 'key' );

// Remove _all_ saved data sessionStorage
sessionStorage.clear( ); 

যদি আপনার জিনিসটি সহজ না হয় - তবে আপনি রাস্তায় যেতে চান এবং একসাথে একটি ভিন্ন পদ্ধতির চেষ্টা করতে চান -> আপনি সম্ভবত একটি shared web workerলাথি ব্যবহার করতে পারেন ...


-4

আপনি পাসের পরিবর্তে জিইটি ব্যবহার করতে পারেন, তবে গুরুত্বপূর্ণ মানগুলির জন্য এই পদ্ধতিটি ব্যবহার করবেন না,

function passIDto(IDval){    
window.location.href = "CustomerBasket.php?oridd=" +  IDval ;
}   

গ্রাহকব্যাসকেট.এফপিতে

<?php
  $value = $_GET["oridd"];
  echo  $value;
?>

3
এর জিইটি পদ্ধতি কিন্তু প্রশ্ন পোস্ট পদ্ধতি বন্ধু
থমরাইসেলভাম

@ঠামারাইসেলভম কিসা মিয়া উত্তরটি ভালভাবে না লিখে থাকতে পারে তবে জিইটি রুটের বিষয়ে এটি সঠিক about পোস্টটি পোষ্ট পদ্ধতিটি ব্যবহার করার ক্ষেত্রে প্রশ্নটি শক্ত হয় না - ব্যবহারকারী কেবল পোস্টটি ডেটা নেওয়ার এবং এটি উইন্ডো.লোকেশন.href এর মাধ্যমে প্রেরণের কোনও উপায় আছে কিনা তা জিজ্ঞাসা করেছিলেন। আর তুমি প্রথম জানা উচিত Window.location.href IS একটি পেতে অনুরোধ। এই উত্তরটি ভুল নয় - কোয়েরি স্ট্রিং হিসাবে এনকোড থাকা ফর্ম ক্ষেত্রের বৃহত সংখ্যায় স্কেল করা সহজ হবে না। তবে, ইউআরএল এর মাধ্যমে ডেটা প্রেরণের সর্বাধিক সুস্পষ্ট উপায় (যা আপনি উইন্ডো.লোকেশন.href দিয়ে পরিবর্তন করতে পারেন) ক্যোরি স্ট্রিং প্যারামিটারগুলির মাধ্যমে।
সিলেনজিরো

@ সাইলনজিরো আপনি কোনও জিইটি অনুরোধের সাথে পোস্টের ডেটা সংযুক্ত করতে পারবেন না। এগুলি বিভিন্ন ধরণের অনুরোধ এবং কোনও পোষ্টে ডেটা আলাদা দেখাচ্ছে। এইচটিটিপি স্পেকের গুরুত্বপূর্ণ অংশগুলি মোটামুটি সংক্ষিপ্ত।
কলিন ভিএইচ

@ কলিনভ এইচ আমি আরও সাবধানে লিখেছি আপনি পড়তে হবে। টিএলডিআর সংস্করণ: আপনি এমন কোনও ডেটা নিতে পারেন যা কোনও পোষ্ট জেনারেট করতে ব্যবহৃত হবে এবং এটিকে ক্যোয়ারিং স্ট্রিং প্যারাম হিসাবে এনকোড করতে পারবেন।
সিলেনজিরো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.