উইন্ডো.পেন এবং পোস্ট পদ্ধতিতে প্যারামিটারগুলি পাস করুন


101

উইন্ডো.পেন পদ্ধতিতে আমি প্যারামিটারগুলির সাহায্যে নতুন সাইট খুলি, যা আমাকে পোস্ট পদ্ধতিতে পাস করতে হবে solution আমি সমাধান খুঁজে পেয়েছি, তবে দুর্ভাগ্যক্রমে এটি কার্যকর হয় না। এটি আমার কোড:

<script  type="text/javascript">    
function openWindowWithPost(url,name,keys,values)
{
    var newWindow = window.open(url, name);

    if (!newWindow) return false;

    var html = "";
    html += "<html><head></head><body><form id='formid' method='post' action='" + url +"'>";

    if (keys && values && (keys.length == values.length))
        for (var i=0; i < keys.length; i++)
            html += "<input type='hidden' name='" + keys[i] + "' value='" + values[i] + "'/>";

    html += "</form><script type='text/javascript'>document.getElementById(\"formid\").submit()</sc"+"ript></body></html>";

    newWindow.document.write(html);
    return newWindow;
}
</script>  

এরপরে, আমি অ্যারেগুলি তৈরি করি:

<script type="text/javascript">    
var values= new Array("value1", "value2", "value3") 
var keys= new Array("a","b","c") 
</script>  

এবং কল ফাংশন দ্বারা:

<input id="Button1" type="button" value="Pass values" onclick="openWindowWithPost('test.asp','',keys,values)" />   

তবে, আমি যখন এই বোতামটিতে ক্লিক করি তখন সাইট টেস্ট.এএসপি ফাঁকা থাকে (অবশ্যই আমি পাসের মানগুলি পাওয়ার চেষ্টা করি Request.Form("b"))।

আমি কীভাবে এই সমস্যাটি সমাধান করতে পারি, কেন আমি পাসের মান পেতে পারি না?


4
কি কাজ করছে না? আমি jsfiddle.net/TZMMF এ একটি অনুলিপি সংরক্ষণ করেছি এবং এটি প্রত্যাশা অনুযায়ী কাজ করে।
প্লিজস্ট্যান্ড

উত্তর দেওয়ার জন্য ধন্যবাদ. হ্যাঁ, দুঃখিত - উপরের কোডটি কাজ করে। তবে আমি কীগুলির অ্যারে দিয়ে এই ফাংশনটি পরীক্ষা করছি: <স্ক্রিপ্ট টাইপ = "পাঠ্য / জাভাস্ক্রিপ্ট"> বিভিন্ন মান = নতুন অ্যারে ("মান 1", "মান 2", "মান 3") ভের কীগুলি = নতুন অ্যারে ("1", "2) "," 3 ") // a, b, c </script> এর জায়গায় আমি অনুরোধের দ্বারা মূল্য পাই orm
luk4443

উত্তর:


121

নতুন উইন্ডোতে কোনও ফর্ম লেখার পরিবর্তে (যা এইচটিএমএল কোডগুলিতে মানগুলির এনকোডিং সহ সঠিক হওয়া জটিল), একটি খালি উইন্ডোটি খুলুন এবং এটিতে একটি ফর্ম পোস্ট করুন।

উদাহরণ:

<form id="TheForm" method="post" action="test.asp" target="TheWindow">
<input type="hidden" name="something" value="something" />
<input type="hidden" name="more" value="something" />
<input type="hidden" name="other" value="something" />
</form>

<script type="text/javascript">
window.open('', 'TheWindow');
document.getElementById('TheForm').submit();
</script>

সম্পাদনা করুন:

রূপটিতে মানগুলি গতিশীলভাবে সেট করতে, আপনি এটি এর মতো করতে পারেন:

function openWindowWithPost(something, additional, misc) {
  var f = document.getElementById('TheForm');
  f.something.value = something;
  f.more.value = additional;
  f.other.value = misc;
  window.open('', 'TheWindow');
  f.submit();
}

ফর্মটি আপনি মান ফাংশন কল পোস্ট করার জন্য, মত openWindowWithPost('a','b','c');

দ্রষ্টব্য: আমি ফর্মের নামের সাথে পরামিতিগুলির নামগুলি পৃথক করেছিলাম তা দেখানোর জন্য যে সেগুলি একই হতে হবে না। মানগুলি ট্র্যাক করা সহজ করার জন্য সাধারণত আপনি একে অপরের সাথে সমান রাখতেন।


ঠিক এটাই আমি ভাবছিলাম। পোস্ট করা আসল কোডটি আইই ব্যতীত যদিও কাজ করছে বলে মনে হচ্ছে।
প্লিজস্ট্যান্ড

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

4
@ luk4443: আপনি উইন্ডোটি খুললে আপনি URL টি ব্যবহার করেন, আপনি ফর্মটি পোস্ট করার পরে পৃষ্ঠাটি প্রতিস্থাপন করা হবে। actionফর্মের সম্পত্তিটিতে ইউআরএল রাখুন ।
গুফা 20

4
@ গুফা এর আচরণ অনুকরণ করার কোনও উপায় target="_blank"?
এভারটন

4
@ এভারটনআগনার: উইন্ডোর জন্য একটি অনন্য নাম ব্যবহার করুন, এবং এটি হিসাবে কাজ করবে _blank
গুফা

62

আপনি যেহেতু পুরো ফর্মটি জাভাস্ক্রিপ্টের ভিতরে চেয়েছিলেন তা ট্যাগগুলিতে লেখার পরিবর্তে, আপনি এটি করতে পারেন:

var form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", "openData.do");

form.setAttribute("target", "view");

var hiddenField = document.createElement("input"); 
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", "message");
hiddenField.setAttribute("value", "val");
form.appendChild(hiddenField);
document.body.appendChild(form);

window.open('', 'view');

form.submit();

5
কোনও jQuery এবং খাঁটি জাভাস্ক্রিপ্ট ভিত্তিক বাস্তবায়ন নেই। ধন্যবাদ
পবন পিলাই

4
@ শ্রেনীর পৃষ্ঠাটি এখানে নতুন ট্যাবে খোলা আছে, আমি কি নতুন পপআপ উইন্ডোতে পৃষ্ঠাটি খুলতে পারি?
ইয়াজে

30

যদিও আমি 3 বছর দেরী হয়েছি, তবে গুফার উদাহরণটি সহজ করতে আপনার পাতায় ফর্মটি লাগবে না:

$('<form method="post" action="test.asp" target="TheWindow">
       <input type="hidden" name="something" value="something">
       ...
   </form>').submit();

সম্পাদিত:

$('<form method="post" action="test.asp" target="TheWindow">
       <input type="hidden" name="something" value="something">
       ...
   </form>').appendTo('body').submit().remove();

কারও জন্য একটি সহায়ক টিপ :)


7
এই সমাধানটি অসম্পূর্ণ। এটি প্রথমে এই ফর্মটি শরীরটি যুক্ত করা উচিত এবং তারপরে এটি জমা দিন। সুতরাং যেখানে এটি বলেছে। সাবমিট (); এটি বলা উচিত .appendTo ('বডি')। জমা দিন ();
জোনাথন ভ্যান ডি ভীন

4
এই অংশটি ছাড়া $("body").append(form);এটি কাজ করবে না
এক্সেল

5
যদি আপনি .remove()জোনাথনের পরামর্শ অনুসারে কোনও যোগ করেন তবে আপনি .appendTo('body').submit()নিজের পরে পরিষ্কার করে ফেলবেন এবং ফর্ম অবজেক্টের সাথে বর্তমান পৃষ্ঠাটিকে বিশৃঙ্খলা করবেন না।
সাইমন

26

আমি উপরে পোস্ট করা ভাড়াটে উত্তরগুলির সাথে সম্পূর্ণ সম্মত এবং আমার জন্য এই ফাংশনটি তৈরি করে যা আমার পক্ষে কাজ করে। এটি কোনও উত্তর নয়, এটি ভাড়াটেদের উপরের পোস্টে একটি মন্তব্য

function openWindowWithPostRequest() {
  var winName='MyWindow';
  var winURL='search.action';
  var windowoption='resizable=yes,height=600,width=800,location=0,menubar=0,scrollbars=1';
  var params = { 'param1' : '1','param2' :'2'};         
  var form = document.createElement("form");
  form.setAttribute("method", "post");
  form.setAttribute("action", winURL);
  form.setAttribute("target",winName);  
  for (var i in params) {
    if (params.hasOwnProperty(i)) {
      var input = document.createElement('input');
      input.type = 'hidden';
      input.name = i;
      input.value = params[i];
      form.appendChild(input);
    }
  }              
  document.body.appendChild(form);                       
  window.open('', winName,windowoption);
  form.target = winName;
  form.submit();                 
  document.body.removeChild(form);           
}

12

আপনি কেবল target="_blank"ফর্মটিতে ব্যবহার করতে পারেন ।

<form action="action.php" method="post" target="_blank">
    <input type="hidden" name="something" value="some value">
</form>

আপনি যেভাবে পছন্দ করেন তার মধ্যে লুকানো ইনপুট যুক্ত করুন এবং তারপরে কেবল জেএসের সাথে ফর্মটি জমা দিন।


অধিকন্তু যেহেতু window.openএকটি পপআপ হিসাবে অবরুদ্ধ করা হবে, যখন কোনও clickহ্যান্ডলারের অভ্যন্তরে ডাকা হবে না (বা এরকম কোনও ব্যবহারকারীর দ্বারা ইভেন্টটি বহিস্কার করা হয়েছে)
জেনোস

4

আমি ইউআরএল, টার্গেট এবং কোনও ডেটা POST/ GETডেটা হিসাবে জমা এবং পদ্ধতি জমা করে একটি ফর্ম তৈরি করতে একটি ফাংশন তৈরি করেছি । এটি সেই বস্তুর মধ্যে নেস্টেড এবং মিশ্রিত প্রকারগুলিকে সমর্থন করে, সুতরাং এটি আপনার খাওয়ানো কোনও কাঠামোর সম্পূর্ণরূপে প্রতিলিপি করতে পারে: পিএইচপি স্বয়ংক্রিয়ভাবে এটিকে পার্স করে এবং নেস্টেড অ্যারে হিসাবে ফিরিয়ে দেয়। যাইহোক, একটি একক সীমাবদ্ধতা হল: বন্ধনী [এবং ]বস্তু (মত যে কোনো একটি কি অংশ হতে হবে {"this [key] is problematic" : "hello world"})। কেউ যদি সঠিকভাবে এড়াতে জানেন তবে দয়া করে জানান!

আরও অগ্রগতি ব্যতীত, এখানে উত্স:

ব্যবহারের উদাহরণ:

document.body.onclick = function() {
  var obj = {
    "a": [1, 2, [3, 4]],
    "b": "a",
    "c": {
      "x": [1],
      "y": [2, 3],
      "z": [{
        "a": "Hello",
        "b": "World"
      }, {
        "a": "Hallo",
        "b": "Welt"
      }]
    }
  };

  var form = getForm("http://example.com", "_blank", obj, "post");

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


ওহো, ব্যবহারের উদাহরণের URL টি ত্রুটিযুক্ত ছিল। যদি এটি স্থির করা হয়, সুতরাং আর কোনও ত্রুটি নেই।
অনুষ্ঠান

4
এখনও ভাঙা মনে হচ্ছে, আমি একটি খালি পৃষ্ঠা পাচ্ছি।
অ্যাডাম পার্কিন

2

পপআপ উইন্ডোতে প্যারামিটারগুলি পাস করার এবং এটি থেকে পরামিতিগুলি পুনরুদ্ধার করার জন্য আমি আরও ভাল উপায় পেয়েছি:

মূল পৃষ্ঠায়:

var popupwindow;
var sharedObject = {};

function openPopupWindow()
{
   // Define the datas you want to pass
   sharedObject.var1 = 
   sharedObject.var2 = 
   ...

   // Open the popup window
   window.open(URL_OF_POPUP_WINDOW, NAME_OF_POPUP_WINDOW, POPUP_WINDOW_STYLE_PROPERTIES);
   if (window.focus) { popupwindow.focus(); }
}

function closePopupWindow()
{
    popupwindow.close();

    // Retrieve the datas from the popup window
    = sharedObject.var1;
    = sharedObject.var2;
    ...
}

পপআপ উইন্ডোতে:

var sharedObject = window.opener.sharedObject;

// function you have to to call to close the popup window
function myclose()
{
    //Define the parameters you want to pass to the main calling window
    sharedObject.var1 = 
    sharedObject.var2 = 
    ...
    window.opener.closePopupWindow();
}

এটাই !

এবং এটি খুব সুবিধাজনক কারণ:

  • পপআপ উইন্ডোর URL এ আপনাকে প্যারামিটার সেট করতে হবে না।
  • সংজ্ঞায়িত করার জন্য কোনও ফর্ম নেই
  • আপনি আলোকিত পরামিতি এমনকি অবজেক্ট ব্যবহার করতে পারেন।
  • দ্বি-দিকনির্দেশনা: আপনি প্যারামিটারগুলি পাস করতে পারেন এবং আপনি যদি চান তবে নতুন প্যারামিটারগুলি পুনরুদ্ধার করতে পারবেন।
  • কার্যকর করা খুব সহজ।

আনন্দ কর!


দ্রষ্টব্য: window.openerসমস্ত ব্রাউজার থেকে সমর্থিত নয়।
র‌্যাপ্টর

1

আমি প্লেন জেএস এবং আনার পলিফিল ব্যবহার করে প্রতিক্রিয়াতে এটি করতে চেয়েছিলাম । ওপি বলেননি যে তিনি বিশেষত একটি ফর্ম তৈরি করতে চান এবং এতে জমা দেওয়ার পদ্ধতিটি উত্সাহিত করতে চেয়েছিলেন, তাই আমি ফর্মের মানগুলি জেসন হিসাবে পোস্ট করে এটি করেছি:

examplePostData = {
    method: 'POST',
    headers: {
       'Content-type' : 'application/json',
       'Accept' : 'text/html'
    },
    body: JSON.stringify({
        someList: [1,2,3,4],
        someProperty: 'something',
        someObject: {some: 'object'}
    })
}

asyncPostPopup = () => {

    //open a new window and set some text until the fetch completes
    let win=window.open('about:blank')
    writeToWindow(win,'Loading...')

    //async load the data into the window
    fetch('../postUrl', this.examplePostData)
    .then((response) => response.text())
    .then((text) => writeToWindow(win,text))
    .catch((error) => console.log(error))
}

writeToWindow = (win,text) => {
    win.document.open()
    win.document.write(text)
    win.document.close()
}

0

ডিফল্ট জমা দেওয়া অ্যাকশন হ'ল Ext.for.action.Submit, যা কোনও কনফিগার করা URL এ ফর্মের মানগুলি জমা দেওয়ার জন্য একটি অ্যাজাক্স অনুরোধ ব্যবহার করে। কোনও এক্সট্রা ফর্মের সাধারণ ব্রাউজার জমা দিতে সক্ষম করতে স্ট্যান্ডার্ড সাবমিট কনফিগারেশন বিকল্পটি ব্যবহার করুন।

লিঙ্ক: http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.form.Basic-cfg- স্ট্যান্ডার্ডসুবমিট

সমাধান: স্ট্যান্ডার্ডসমিট: আপনার কনফিগারেশনে সত্য। আশা করি এটি আপনাকে সহায়তা করবে :)


0

আমি অতীতে এটি ব্যবহার করেছি, যেহেতু আমরা সাধারণত কোডিংয়ের জন্য রেজার সিনট্যাক্স ব্যবহার করি

@using (Html.BeginForm("actionName", "controllerName", FormMethod.Post, new { target = "_blank" }))

{

// এখানে লুকানো এবং ফর্ম যুক্ত করুন

}

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.