පෝරමයක් ඉදිරිපත් කිරීම වැනි ජාවාස්ක්‍රිප්ට් පෝස්ට් ඉල්ලීම


1546

මම බ්‍රව්සරයක් වෙනත් පිටුවකට යොමු කිරීමට උත්සාහ කරමි. මට GET ඉල්ලීමක් අවශ්‍ය නම්, මම පැවසිය හැකිය

document.location.href = 'http://example.com/q=a';

නමුත් මම POST ඉල්ලීමක් භාවිතා නොකරන්නේ නම් ප්‍රවේශ වීමට උත්සාහ කරන සම්පත නිසි ලෙස ප්‍රතිචාර නොදක්වයි. මෙය ගතිකව ජනනය නොකළේ නම්, මට HTML භාවිතා කළ හැකිය

<form action="http://example.com/" method="POST">
  <input type="hidden" name="q" value="a">
</form>

එවිට මම ආකෘති පත්‍රය DOM වෙතින් ඉදිරිපත් කරමි.

නමුත් ඇත්ත වශයෙන්ම මම කියන්නට ඉඩ දෙන ජාවාස්ක්‍රිප්ට් කේතයට කැමතියි

post_to_url('http://example.com/', {'q':'a'});

හොඳම හරස් බ්‍රව්සර ක්‍රියාත්මක කිරීම කුමක්ද?

සංස්කරණය කරන්න

මට කණගාටුයි මට පැහැදිලි නැත. පෝරමයක් ඉදිරිපත් කරනවා සේම බ්‍රව්සරයේ පිහිටීම වෙනස් කරන විසඳුමක් මට අවශ්‍යය. XMLHttpRequest සමඟ මෙය කළ හැකි නම් , එය පැහැදිලිව පෙනෙන්නට නැත. මෙය අසමමුහුර්ත නොවිය යුතුය, හෝ XML භාවිතා නොකරන්න, එබැවින් අජැක්ස් පිළිතුර නොවේ.


1
වෙනත් ත්‍රෙඩ් එකක සඳහන් කර ඇති පරිදි POST හෝ GET ක්‍රමය සමඟ ක්‍රියා කරන jquery ".redirect" ප්ලගිනයක් ඇත. එය සැඟවුණු යෙදවුම් සහිත පෝරමයක් නිර්මාණය කර එය ඔබ වෙනුවෙන් ඉදිරිපත් කරයි. උදා: red. සෘජුකෝණාස්රය ('demo.php', {'arg1': 'value1', 'arg2': 'value2'}); github.com/mgalante/jquery.redirect/blob/master/…
OG Sean

මෙම documentවස්තුව නැති location.hrefඔබ භාවිතා කිරීමට අවශ්ය window.
ජස්ටින් ලියු

Answers:


2161

<input>ස්වරූපයෙන් ගතිකව නිර්මාණය කර එය ඉදිරිපත් කරන්න

/**
 * sends a request to the specified url from a form. this will change the window location.
 * @param {string} path the path to send the post request to
 * @param {object} params the paramiters to add to the url
 * @param {string} [method=post] the method to use on the form
 */

function post(path, params, method='post') {

  // The rest of this code assumes you are not using a library.
  // It can be made less wordy if you use one.
  const form = document.createElement('form');
  form.method = method;
  form.action = path;

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

      form.appendChild(hiddenField);
    }
  }

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

උදාහරණයක්:

post('/contact/', {name: 'Johnny Bravo'});

සංස්කරණය කරන්න : මෙය බොහෝ සෙයින් ඉහළ ගොස් ඇති හෙයින්, මම සිතන්නේ මිනිසුන් මෙය පිටපත්-අලවනු ඇත. එබැවින් මම hasOwnPropertyනොදැනුවත්වම දෝෂ නිවැරදි කිරීමට චෙක්පත එක් කළෙමි .


10
දත්ත පරාමිතීන්හි අරා ගැන කුමක් කිව හැකිද? Jquery post () අර්ථ නිරූපණය කරන්නේ උදා: "data: {array: [1, 2, 3] as" as? Array = 1 & array = 2 & array = 3. විස් කේතය තවත් ප්‍රති .ලයක් ලබා දෙයි.
Scit

19
අවවාදයයි: බොහෝ උඩු යටිකුරුකම් තිබියදීත්, මෙම විසඳුම සීමිත වන අතර පෝරමයක් තුළ අරා හෝ කැදැලි වස්තූන් හසුරුවන්නේ නැත. එසේ නොමැති නම් එය විශිෂ්ට පිළිතුරකි.
emragins

3
පුදුම සහගත මෙය html හෝ javascript jquery මගින් දේශීයව සහාය නොදක්වයි .. ඔබට මෙය කේත කළ යුතුය.
ඉයුජින්

14
ricmricci මෙම ස්නිපටයේ කාරණය වන්නේ ක්‍රියාව මඟින් නිශ්චිතව දක්වා ඇති නව URL එකකට බ්‍රව්සරය හරවා යැවීමයි; ඔබ එකම පිටුවක රැඳී සිටින්නේ නම් ඔබේ දත්ත පළ කිරීම සඳහා සාම්ප්‍රදායික අජැක්ස් භාවිතා කළ හැකිය. බ්‍රව්සරය නව පිටුවකට සැරිසැරිය යුතු බැවින්, වත්මන් පිටුවෙහි DOM හි අන්තර්ගතය වැදගත් නොවේ
කෙන් බෙලෝස්

6
පයිතන්, ජැන්ගෝ සහ බොහෝ විට ෆ්ලැස්ක් භාවිතා කරන්නන් මෙම දෝෂය දකිනු ඇත: "තහනම් (403). CSRF සත්‍යාපනය අසාර්ථක විය. ඉල්ලීම අත්හිටුවා ඇත." මෙම අවස්ථාවේදී, ඔබ csrf ටෝකනය මේ ආකාරයෙන් සම්මත කළ යුතුය: තනතුර ('/ contact /', {name: 'Johnny Bravo', csrfmiddlewaretoken: $ ("# csrf_token"). Val ()});
ඩේවිඩ්සන් ලීමා

130

මෙය jQuery භාවිතා කර තෝරාගත් පිළිතුරේ අනුවාදයක් වනු ඇත .

// Post to the provided URL with the specified parameters.
function post(path, parameters) {
    var form = $('<form></form>');

    form.attr("method", "post");
    form.attr("action", path);

    $.each(parameters, function(key, value) {
        var field = $('<input></input>');

        field.attr("type", "hidden");
        field.attr("name", key);
        field.attr("value", value);

        form.append(field);
    });

    // The form needs to be a part of the document in
    // order for us to be able to submit it.
    $(document.body).append(form);
    form.submit();
}

2
ස්ථාවර: දැන් document.body වෙත එකතු වේ
රයන් ඩෙලූචි

7
අරා සහ වස්තූන් සඳහා සහය දැක්වීම සඳහා මෙය තරමක් වෙනස් කරන ලදි gist.github.com/hom3chuk/692bf12fe7dac2486212
НЛО

3
අගයෙහි අන්තරාදායක xml අක්ෂරයක් තිබේ නම්, මෙය ASP.NET encodeUriComponent (අගය) තුළ ක්‍රියා නොකරනු ඇත. එවිට, සර්වර් පැත්තේ UrlDecode ද අවශ්‍ය වේ.
ස්ටෙෆාන් ස්ටීගර්

ඔබේ අවශ්‍යතා සරල නම්, මෙම ක්‍රියාව අනවශ්‍යය. මෙම එක් ලයිනර් ප්‍රමාණවත්:$("<form method='POST' action='https://example.com'><input type='hidden' name='q' value='a'/></form>").appendTo("body").submit();
රිනෝගෝ

72

ආරොන් පිළිතුර සරල හා ඉක්මන් හා අපිරිසිදු ලෙස ක්‍රියාත්මක කිරීම:

document.body.innerHTML += '<form id="dynForm" action="http://example.com/" method="post"><input type="hidden" name="q" value="a"></form>';
document.getElementById("dynForm").submit();

ඇත්ත වශයෙන්ම, ඔබ භාවිතා කළ යුත්තේ මූලාකෘති හෝ jQuery වැනි ජාවාස්ක්‍රිප්ට් රාමුවක් ...


6
වත්මන් බ්‍රව්සර් කවුළුව / පටිත්තෙහි වෙබ් පිටුවක් පටවා නොගෙන මෙය කිරීමට ක්‍රමයක් තිබේද?
pbreitenbach

55

මෙම පිළිතුරේcreateElement සපයා ඇති ශ්‍රිතය භාවිතා කිරීම , සාමාන්‍යයෙන් නිර්මාණය කරන ලද මූලද්‍රව්‍යවල නාම ලක්ෂණය සමඟ IE හි බිඳවැටීම නිසා අවශ්‍ය වේ :document.createElement

function postToURL(url, values) {
    values = values || {};

    var form = createElement("form", {action: url,
                                      method: "POST",
                                      style: "display: none"});
    for (var property in values) {
        if (values.hasOwnProperty(property)) {
            var value = values[property];
            if (value instanceof Array) {
                for (var i = 0, l = value.length; i < l; i++) {
                    form.appendChild(createElement("input", {type: "hidden",
                                                             name: property,
                                                             value: value[i]}));
                }
            }
            else {
                form.appendChild(createElement("input", {type: "hidden",
                                                         name: property,
                                                         value: value}));
            }
        }
    }
    document.body.appendChild(form);
    form.submit();
    document.body.removeChild(form);
}

6
ඉදිරිපත් කිරීමෙන් පසු දරුවා ඉවත් කිරීමට ඔබට අවශ්‍යද? කෙසේ හෝ පිටුව පහව යන්නේ නැද්ද?
නිල්ස්

2
සැසියක් භාවිතා කර එම දත්ත සුරකිනවා හැර, ඉදිරිපත් කිරීමෙන් පසු දරුවා ඉවත් කිරීමට කිසිදු ප්‍රයෝජනයක් නොමැත.
මිලෝ

6
AntCantucciHQ පෝරම ඉලක්කය සකසා නොතිබුණද පිටුව නොවෙනස්ව පැවතිය හැකිය. ඇත 204 නොමැත අන්තර්ගත උදාහරණයක් ලෙස,.
ඉයුජින් රියාබ්ට්සෙව්

39

රාකේෂ් පයිගේ පිළිතුර විශ්මයජනකයි, නමුත් මම ( සෆාරි හි ) ක්ෂේත්‍රයක් සමඟ පෝරමයක් පළ කිරීමට උත්සාහ කරන විට මට ඇතිවන ගැටලුවක් තිබේ submit. උදාහරණයක් ලෙස , post_to_url("http://google.com/",{ submit: "submit" } );. මෙම විචල්‍ය අභ්‍යවකාශ ision ට්ටනය වටා ගමන් කිරීම සඳහා මම ශ්‍රිතය තරමක් දුරට ඇලවූවෙමි.

    function post_to_url(path, params, method) {
        method = method || "post";

        var form = document.createElement("form");

        //Move the submit function to another variable
        //so that it doesn't get overwritten.
        form._submit_function_ = form.submit;

        form.setAttribute("method", method);
        form.setAttribute("action", path);

        for(var key in params) {
            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_function_(); //Call the renamed function.
    }
    post_to_url("http://google.com/", { submit: "submit" } ); //Works!

7
2018 සහ තවමත් වඩා හොඳ පිළිතුරක් නොවේද?
iiirxs

31

පෝරමයක් ඉදිරිපත් කිරීමක් වැනි ඔබට ජාවාස්ක්‍රිප්ට් පෝස්ට් ඉල්ලීම තිබිය නොහැක.

ඔබට තිබිය හැක්කේ HTML හි ඇති පෝරමයක් වන අතර පසුව එය ජාවාස්ක්‍රිප්ට් සමඟ ඉදිරිපත් කරන්න. (මෙම පිටුවේ බොහෝ වාරයක් විස්තර කර ඇති පරිදි).

ඔබට ඔබ විසින්ම HTML නිර්මාණය කළ හැකිය, HTML ලිවීමට ඔබට JavaScript අවශ්‍ය නොවේ. මිනිසුන් එය යෝජනා කළහොත් එය මෝඩකමක් වනු ඇත.

<form id="ninja" action="http://example.com/" method="POST">
  <input id="donaldduck" type="hidden" name="q" value="a">
</form>

ඔබේ ශ්‍රිතය ඔබට අවශ්‍ය ආකාරයට ආකෘති පත්‍රය වින්‍යාස කරයි.

function postToURL(a,b,c){
   document.getElementById("ninja").action     = a;
   document.getElementById("donaldduck").name  = b;
   document.getElementById("donaldduck").value = c;
   document.getElementById("ninja").submit();
}

ඉන්පසු එය භාවිතා කරන්න.

postToURL("http://example.com/","q","a");

නමුත් මම කාර්යය අතහැර දමා කරන්නෙමි.

document.getElementById('donaldduck').value = "a";
document.getElementById("ninja").submit();

අවසාන වශයෙන්, විලාසිතාවේ තීරණය ccs ගොනුවේ යයි.

#ninja{ 
  display:none;
}

පුද්ගලිකව මම සිතන්නේ පෝරම නාමයෙන් ආමන්ත්‍රණය කළ යුතු නමුත් එය දැන් වැදගත් නොවේ.


27

ඔබ මූලාකෘති ස්ථාපනය කර ඇත්නම්, සැඟවුණු පෝරමය ජනනය කිරීමට සහ ඉදිරිපත් කිරීමට ඔබට කේතය තද කළ හැකිය:

 var form = new Element('form',
                        {method: 'post', action: 'http://example.com/'});
 form.insert(new Element('input',
                         {name: 'q', value: 'a', type: 'hidden'}));
 $(document.body).insert(form);
 form.submit();

26

මෙය රාකේෂ්ගේ පිළිතුරයි, නමුත් අරා සඳහා ආධාරයෙන් (එය ආකෘතිවල බහුලව දක්නට ලැබේ):

සරල ජාවාස්ක්‍රිප්ට්:

function post_to_url(path, params, method) {
    method = method || "post"; // Set method to post by default, if not specified.

    // The rest of this code assumes you are not using a library.
    // It can be made less wordy if you use one.
    var form = document.createElement("form");
    form.setAttribute("method", method);
    form.setAttribute("action", path);

    var addField = function( key, value ){
        var hiddenField = document.createElement("input");
        hiddenField.setAttribute("type", "hidden");
        hiddenField.setAttribute("name", key);
        hiddenField.setAttribute("value", value );

        form.appendChild(hiddenField);
    }; 

    for(var key in params) {
        if(params.hasOwnProperty(key)) {
            if( params[key] instanceof Array ){
                for(var i = 0; i < params[key].length; i++){
                    addField( key, params[key][i] )
                }
            }
            else{
                addField( key, params[key] ); 
            }
        }
    }

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

ඔහ්, සහ මෙන්න jquery අනුවාදය: (තරමක් වෙනස් කේතයක්, නමුත් එකම දෙයකට තම්බා)

function post_to_url(path, params, method) {
    method = method || "post"; // Set method to post by default, if not specified.

    var form = $(document.createElement( "form" ))
        .attr( {"method": method, "action": path} );

    $.each( params, function(key,value){
        $.each( value instanceof Array? value : [value], function(i,val){
            $(document.createElement("input"))
                .attr({ "type": "hidden", "name": key, "value": val })
                .appendTo( form );
        }); 
    } ); 

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

3
ps මම දැන් එම ශ්‍රිතය භාවිතා කිරීමෙන් සතුටක් ලබන නමුත් අවසානයේ පෝරමය ඉදිරිපත් කරනවා වෙනුවට මම එය නැවත අමතන්නාට භාර දෙමි. මේ ආකාරයෙන් මට පහසුවෙන් අමතර ගුණාංග සැකසීමට හෝ අවශ්‍ය නම් වෙනත් දේවල් කළ හැකිය.
kritzikratzi

3
මහා! ඉතා ප්‍රයෝජනවත්. මෙම පෝරමයේ සේවාදායක පැත්තේ PHP මත යැපෙන පුද්ගලයින් සඳහා කුඩා වෙනසක්, මම addField (key, params [key] [i]) addField (key + '[]', params [key] [i]) ලෙස වෙනස් කළෙමි. මෙය $ _POST [යතුර] අරාව ලෙස ලබා ගත හැකිය.
තවා

2
Ha තාවා ඔබට ඔබේ ආදාන ක්ෂේත්‍රයෙහි නම = "bla []" සැකසිය හැකිය. කෙසේ වෙතත්, [] වාක්‍ය ඛණ්ඩයට සහය නොදක්වන php හැර වෙනත් භාෂා ඇත, එබැවින් මම මෙය නොවෙනස්ව තබමි.
kritzikratzi

18

එක් විසඳුමක් වන්නේ ආකෘති පත්‍රය ජනනය කර ඉදිරිපත් කිරීමයි. එක් ක්‍රියාත්මක කිරීමකි

function post_to_url(url, params) {
    var form = document.createElement('form');
    form.action = url;
    form.method = 'POST';

    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);
        }
    }

    form.submit();
}

එබැවින් මට සරල ලෙස URL කෙටි කිරීමේ පොත් සලකුණක් ක්‍රියාත්මක කළ හැකිය

javascript:post_to_url('http://is.gd/create.php', {'URL': location.href});

17

හොඳයි, මම අනෙක් සියලුම ලිපි කියවා තිබුනේ නම් රාකේෂ් පයිගේ පිළිතුරෙන් මෙය නිර්මාණය කිරීමට මට කාලය අහිමි නොවීය. අරා සහ වස්තූන් සමඟ ක්‍රියා කරන පුනරාවර්තන විසඳුමක් මෙන්න. JQuery මත යැපීමක් නැත.

සම්පූර්ණ පෝරමය අරාව මෙන් ඉදිරිපත් කළ යුතු අවස්ථා හැසිරවීමට කොටසක් එකතු කරන ලදි. (එනම්, අයිතම ලැයිස්තුවක් වටා එතීමේ වස්තුවක් නොමැති තැන)

/**
 * Posts javascript data to a url using form.submit().  
 * Note: Handles json and arrays.
 * @param {string} path - url where the data should be sent.
 * @param {string} data - data as javascript object (JSON).
 * @param {object} options -- optional attributes
 *  { 
 *    {string} method: get/post/put/etc,
 *    {string} arrayName: name to post arraylike data.  Only necessary when root data object is an array.
 *  }
 * @example postToUrl('/UpdateUser', {Order {Id: 1, FirstName: 'Sally'}});
 */
function postToUrl(path, data, options) {
    if (options === undefined) {
        options = {};
    }

    var method = options.method || "post"; // Set method to post by default if not specified.

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

    function constructElements(item, parentString) {
        for (var key in item) {
            if (item.hasOwnProperty(key) && item[key] != null) {
                if (Object.prototype.toString.call(item[key]) === '[object Array]') {
                    for (var i = 0; i < item[key].length; i++) {
                        constructElements(item[key][i], parentString + key + "[" + i + "].");
                    }
                } else if (Object.prototype.toString.call(item[key]) === '[object Object]') {
                    constructElements(item[key], parentString + key + ".");
                } else {
                    var hiddenField = document.createElement("input");
                    hiddenField.setAttribute("type", "hidden");
                    hiddenField.setAttribute("name", parentString + key);
                    hiddenField.setAttribute("value", item[key]);
                    form.appendChild(hiddenField);
                }
            }
        }
    }

    //if the parent 'data' object is an array we need to treat it a little differently
    if (Object.prototype.toString.call(data) === '[object Array]') {
        if (options.arrayName === undefined) console.warn("Posting array-type to url will doubtfully work without an arrayName defined in options.");
        //loop through each array item at the parent level
        for (var i = 0; i < data.length; i++) {
            constructElements(data[i], (options.arrayName || "") + "[" + i + "].");
        }
    } else {
        //otherwise treat it normally
        constructElements(data, "");
    }

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

1
මෙය කූඩු කළ වස්තූන් නිසි ලෙස සංකේතවත් කරන බවක් නොපෙනේ.
mpen

1
@mpen ඔබට ෆෙඩල් එකක් තිබේද?
emragins

1
නෑ, සමාවෙන්න. මා ලිවීමට තරම් පහසු විය; නිදොස් කිරීමට කාලය වටින්නේ නැත.
mpen

13

විකල්ප තුනක් මෙහි ඇත.

  1. සම්මත ජාවාස්ක්‍රිප්ට් පිළිතුර: රාමුවක් භාවිතා කරන්න! බොහෝ අජැක්ස් රාමු මඟින් ඔබට XMLHTTPRequest POST සෑදීමට පහසු ක්‍රමයක් වියුක්ත කර ඇත .

  2. XMLHTTPRequest ඉල්ලීම ඔබම කර ගන්න, ලබා ගැනීම වෙනුවට විවෘත ක්‍රමයට පෝස්ට් යවන්න. ( XMLHTTPRequest (Ajax) හි POST ක්‍රමය භාවිතා කිරීම පිළිබඳ වැඩි විස්තර .)

  3. ජාවාස්ක්‍රිප්ට් හරහා, ගතිකව පෝරමයක් සාදන්න, ක්‍රියාවක් එක් කරන්න, ඔබේ යෙදවුම් එකතු කර එය ඉදිරිපත් කරන්න.


5
XMLHTTPRequest කවුළුව යාවත්කාලීන නොකරයි. AJAX සමඟ document.write (http.responseText) සමඟ අවසන් කළ යුතු යැයි ඔබ කියන්නට උත්සාහ කරනවාද?
ජෝශප් හොල්ස්ටන්

11
යමෙකු රාමුව සමඟ වෙනත් දෙයක් කරන්නේ නම් යමෙකු ඔහුගේ ව්‍යාපෘතියට 30k + එකතු කළ යුත්තේ ඇයි?
ඩිමෙන්ටික්

13

පහසුම ක්‍රමය වන්නේ අජැක්ස් පෝස්ට් ඉල්ලීම භාවිතා කිරීමයි:

$.ajax({
    type: "POST",
    url: 'http://www.myrestserver.com/api',
    data: data,
    success: success,
    dataType: dataType
    });

කොහේද:

  • දත්ත යනු වස්තුවකි
  • dataType යනු සේවාදායකයා අපේක්ෂා කරන දත්තයි (xml, json, script, text, html)
  • url යනු ඔබේ RESt සේවාදායකයේ ලිපිනය හෝ HTTP-POST පිළිගන්නා සේවාදායක පැත්තේ ඇති ඕනෑම කාර්යයකි.

සාර්ථක හසුරුවන්නා තුළ window.location වැනි දෙයක් සමඟ බ්‍රව්සරය හරවා යවයි.


5
ඔබ ඉදිරිපත් කරන ප්‍රවේශය පදනම් වී ඇත්තේ jQuery ජාවාස්ක්‍රිප්ට් පුස්තකාලය මත බව ඔබ සඳහන් කළේ නැත .
ඩේවිඩ්ආර්

8
ඔබට ප්‍රශ්නයේ කාරණයද මග හැරී ඇත - ඔහුට අවශ්‍ය වන්නේ 'බ්‍රව්සරයක් වෙනත් පිටුවකට යොමු කිරීමට' මිස අජැක්ස් ඉල්ලීමක් කිරීමට නොවේ.
කළු

ඔබට පිළිතුර සඳහා රැඳී සිට පසුව document.location = {url}; ඔබ ගොනු බාගත කිරීමකට හරවා යැවුවහොත් මෙය ක්‍රියාත්මක නොවනු ඇතැයි මට සිතිය හැකි එකම ස්ථානයයි.
එපිරොක්ස්

13

අනෙක් අය යෝජනා කළ පරිදි මම අජැක්ස් මාර්ගයෙන් බැස යන්නෙමි:

var xmlHttpReq = false;

var self = this;
// Mozilla/Safari
if (window.XMLHttpRequest) {
    self.xmlHttpReq = new XMLHttpRequest();
}
// IE
else if (window.ActiveXObject) {
    self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
}

self.xmlHttpReq.open("POST", "YourPageHere.asp", true);
self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');

self.xmlHttpReq.setRequestHeader("Content-length", QueryString.length);



self.xmlHttpReq.send("?YourQueryString=Value");

1
හඳුනා නොගත් යොමු දෝෂය: QueryString අර්ථ දක්වා නැත.
චේස් රොබට්ස්

12

මෙන්න මම එය jQuery භාවිතයෙන් ලිවූ ආකාරයයි. ෆයර්ෆොක්ස් සහ ඉන්ටර්නෙට් එක්ස්ප්ලෝරර් හි පරීක්ෂා කර ඇත.

function postToUrl(url, params, newWindow) {
    var form = $('<form>');
    form.attr('action', url);
    form.attr('method', 'POST');
    if(newWindow){ form.attr('target', '_blank'); 
  }

  var addParam = function(paramName, paramValue) {
      var input = $('<input type="hidden">');
      input.attr({ 'id':     paramName,
                 'name':   paramName,
                 'value':  paramValue });
      form.append(input);
    };

    // Params is an Array.
    if(params instanceof Array){
        for(var i=0; i<params.length; i++) {
            addParam(i, params[i]);
        }
    }

    // Params is an Associative array or Object.
    if(params instanceof Object) {
        for(var key in params){
            addParam(key, params[key]);
        }
    }

    // Submit the form, then remove it from the page
    form.appendTo(document.body);
    form.submit();
    form.remove();
}

1
මා වෙනුවෙන් වැඩ කළා. ස්තූතියි. (ක්‍රෝම් හි පරීක්ෂා කර ඇත)
dannie.f

2
ඉදිරිපත් කිරීම නැවත පැමිණීමට පෙර පෝරමය ඉවත් කිරීම මෙහි ඇති ගැටලුව විය හැකි යැයි මම සිතමි. සමහර බ්‍රව්සර් වල ඔබ ඉදිරිපත් කිරීම සම්පූර්ණ කිරීමට පෙර පෝරමය ගෙන ගියහොත් හෝ ඉවත් කළහොත්, හසුරුවන්නන් වෙඩි තබන්නේ නැත. ඒ වෙනුවට, හසුරුවන්නාගේ ලේඛනයෙන් පෝරමය ඉවත් කරන්න.
ජෙෆ්

චාම් එකක් වගේ වැඩ කරනවා. ෆයර්ෆොක්ස් + ක්‍රෝම් + අයිඊ 11 හි පරීක්ෂා කර ඇත - මේ සඳහා ඔබට බොහෝම ස්තූතියි!
ඩියුන්ස්

7

මෙම මූලාකෘති පුස්තකාලය ඔබට පහසුවෙන් කළ විමසීමකදී-string ආකාරයේ string එකකට ජාවාස්ක්රිප්ට් වස්තුව / ව්යුහය හැරී කිරීමට ඉඩ වූ ".toQueryString ()" ක්රමය, සමග, Hashtable වස්තුව ඇතුළත් වේ. පෝස්ටයට ඉල්ලීමේ "ශරීරය" විමසුම්-හැඩතල ගැන්වූ නූලක් වීමට අවශ්‍ය බැවින්, මෙය ඔබගේ අජැක්ස් ඉල්ලීම තනතුරක් ලෙස නිසියාකාරව වැඩ කිරීමට ඉඩ දෙයි. මූලාකෘති භාවිතා කරන උදාහරණයක් මෙන්න:

$req = new Ajax.Request("http://foo.com/bar.php",{
    method: 'post',
    parameters: $H({
        name: 'Diodeus',
        question: 'JavaScript posts a request like a form request',
        ...
    }).toQueryString();
};

1
මෙම විසඳුම සේවාදායක පිළිතුර නැවත ලබා දීමෙන් දැනට ප්‍රදර්ශනය කර ඇති ලේඛනය ප්‍රතිස්ථාපනය නොකරන ස්වල්පයෙන් එකකි.
dothebart

5

මෙය මගේ නඩුවේදී හොඳින් ක්‍රියාත්මක වේ:

document.getElementById("form1").submit();

ඔබට එය පහත පරිදි ක්‍රියා කළ හැකිය:

function formSubmit() {
     document.getElementById("frmUserList").submit();
} 

මෙය භාවිතා කිරීමෙන් ඔබට යෙදවුම් වල සියලු අගයන් පළ කළ හැකිය.


4

තවත් සමහරක් පුනරාවර්තන විසඳුමක්, මන්ද සමහර ඒවා කැඩී ඇති බව පෙනේ (මම ඒවා සියල්ලම අත්හදා බැලුවේ නැත). මෙය ලෝඩාෂ් 3.x සහ ඊඑස් 6 මත රඳා පවතී (jQuery අවශ්‍ය නොවේ):

function createHiddenInput(name, value) {
    let input = document.createElement('input');
    input.setAttribute('type','hidden');
    input.setAttribute('name',name);
    input.setAttribute('value',value);
    return input;
}

function appendInput(form, name, value) {
    if(_.isArray(value)) {
        _.each(value, (v,i) => {
            appendInput(form, `${name}[${i}]`, v);
        });
    } else if(_.isObject(value)) {
        _.forOwn(value, (v,p) => {
            appendInput(form, `${name}[${p}]`, v);
        });
    } else {
        form.appendChild(createHiddenInput(name, value));
    }
}

function postToUrl(url, data) {
    let form = document.createElement('form');
    form.setAttribute('method', 'post');
    form.setAttribute('action', url);

    _.forOwn(data, (value, name) => {
        appendInput(form, name, value);
    });

    form.submit();
}

4

මගේ විසඳුම @RakeshPai විසින් දැනට පිළිගෙන ඇති විසඳුම මෙන් නොව ගැඹුරින් කැදැලි සහිත වස්තූන් සංකේතවත් කරනු ඇත.

කැදැලි වස්තු පරාමිතීන් බවට පරිවර්තනය කිරීම සඳහා එය 'qs' npm පුස්තකාලය සහ එහි දැඩි ක්‍රියාකාරිත්වය භාවිතා කරයි.

මෙම කේතය රේල්ස් පසුපස අන්තය සමඟ හොඳින් ක්‍රියා කරයි, නමුත් ඔබට අවශ්‍ය ඕනෑම පසුබිමක් සමඟ වැඩ කිරීමට එය වෙනස් කිරීමට හැකි විය යුතුය. රේල් පීලි වලට අරා ෆෝමැට් "වරහන්" ලෙස සැකසිය යුතුය.

import qs from "qs"

function normalPost(url, params) {
  var form = document.createElement("form");
  form.setAttribute("method", "POST");
  form.setAttribute("action", url);

  const keyValues = qs
    .stringify(params, { arrayFormat: "brackets", encode: false })
    .split("&")
    .map(field => field.split("="));

  keyValues.forEach(field => {
    var key = field[0];
    var value = field[1];
    var hiddenField = document.createElement("input");
    hiddenField.setAttribute("type", "hidden");
    hiddenField.setAttribute("name", key);
    hiddenField.setAttribute("value", value);
    form.appendChild(hiddenField);
  });
  document.body.appendChild(form);
  form.submit();
}

උදාහරණයක්:

normalPost("/people/new", {
      people: [
        {
          name: "Chris",
          address: "My address",
          dogs: ["Jordan", "Elephant Man", "Chicken Face"],
          information: { age: 10, height: "3 meters" }
        },
        {
          name: "Andrew",
          address: "Underworld",
          dogs: ["Doug", "Elf", "Orange"]
        },
        {
          name: "Julian",
          address: "In a hole",
          dogs: ["Please", "Help"]
        }
      ]
    });

මෙම රේල් පීලි පරාමිතීන් නිෂ්පාදනය කරයි:

{"authenticity_token"=>"...",
 "people"=>
  [{"name"=>"Chris", "address"=>"My address", "dogs"=>["Jordan", "Elephant Man", "Chicken Face"], "information"=>{"age"=>"10", "height"=>"3 meters"}},
   {"name"=>"Andrew", "address"=>"Underworld", "dogs"=>["Doug", "Elf", "Orange"]},
   {"name"=>"Julian", "address"=>"In a hole", "dogs"=>["Please", "Help"]}]}

2

FormObject යනු විකල්පයකි. නමුත් FormObject සඳහා දැන් බොහෝ බ්‍රව්සර් සහාය නොදක්වයි.


1

මෙය ඇලන්ගේ විකල්පය 2 (ඉහළ) වැනි ය. Httpobj ක්ෂණිකව ක්‍රියාත්මක කරන්නේ කෙසේද යන්න අභ්‍යාසයක් ලෙස ඉතිරිව ඇත.

httpobj.open("POST", url, true);
httpobj.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
httpobj.onreadystatechange=handler;
httpobj.send(post);

1

මෙය පදනම් වී ඇත්තේ jQuery භාවිතා කරමින් beauSD කේතය මත ය. එය වැඩි දියුණු කර ඇති නිසා එය වස්තූන් මත පුනරාවර්තව ක්‍රියා කරයි.

function post(url, params, urlEncoded, newWindow) {
    var form = $('<form />').hide();
    form.attr('action', url)
        .attr('method', 'POST')
        .attr('enctype', urlEncoded ? 'application/x-www-form-urlencoded' : 'multipart/form-data');
    if(newWindow) form.attr('target', '_blank');

    function addParam(name, value, parent) {
        var fullname = (parent.length > 0 ? (parent + '[' + name + ']') : name);
        if(value instanceof Object) {
            for(var i in value) {
                addParam(i, value[i], fullname);
            }
        }
        else $('<input type="hidden" />').attr({name: fullname, value: value}).appendTo(form);
    };

    addParam('', params, '');

    $('body').append(form);
    form.submit();
}



1

මම document.forms java භාවිතා කර පෝරමයේ ඇති සියලුම අංග ලබා ගැනීමට එය ලූප් කර xhttp හරහා යවන්න. එබැවින් ජාවාස්ක්‍රිප්ට් / අජැක්ස් ඉදිරිපත් කිරීම සඳහා මෙය මගේ විසඳුමයි (සියලුම html උදාහරණයක් ලෙස ඇතුළත් කර ඇත):

          <!DOCTYPE html>
           <html>
           <body>
           <form>
       First name: <input type="text" name="fname" value="Donald"><br>
        Last name: <input type="text" name="lname" value="Duck"><br>
          Addr1: <input type="text" name="add" value="123 Pond Dr"><br>
           City: <input type="text" name="city" value="Duckopolis"><br>
      </form> 



           <button onclick="smc()">Submit</button>

                   <script>
             function smc() {
                  var http = new XMLHttpRequest();
                       var url = "yourphpfile.php";
                     var x = document.forms[0];
                          var xstr = "";
                         var ta ="";
                    var tb ="";
                var i;
               for (i = 0; i < x.length; i++) {
     if (i==0){ta = x.elements[i].name+"="+ x.elements[i].value;}else{
       tb = tb+"&"+ x.elements[i].name +"=" + x.elements[i].value;
             } }

           xstr = ta+tb;
      http.open("POST", url, true);
       http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

      http.onreadystatechange = function() {
          if(http.readyState == 4 && http.status == 200) {

        // do whatever you want to with the html output response here

                } 

               }
            http.send(xstr);

              }
         </script>

         </body>
     </html>

1

පෝරමය ඉදිරිපත් කිරීම සඳහා ඔබට jQuery හි ප්‍රේරක ක්‍රමය භාවිතා කළ හැකිය, ඔබ බොත්තමක් එබූවාක් මෙන්,

$('form').trigger('submit')

එය බ්‍රව්සරයේ ඉදිරිපත් කරනු ඇත.


0

පරිශීලකයෙකු වෙනත් පිටුවකට ස්වයංක්‍රීයව පළ කිරීම සහ යොමු කිරීම සඳහා මා භාවිතා කරන ක්‍රමය වන්නේ සැඟවුණු පෝරමයක් ලිවීම සහ එය ස්වයංක්‍රීයව ඉදිරිපත් කිරීමයි. සැඟවුණු පෝරමය වෙබ් පිටුවෙහි කිසිදු ඉඩක් නොගන්නා බවට සහතික වන්න. කේතය මේ වගේ දෙයක් වනු ඇත:

    <form name="form1" method="post" action="somepage.php">
    <input name="fielda" type="text" id="fielda" type="hidden">

    <textarea name="fieldb" id="fieldb" cols="" rows="" style="display:none"></textarea>
</form>
    document.getElementById('fielda').value="some text for field a";
    document.getElementById('fieldb').innerHTML="some text for multiline fieldb";
    form1.submit();

ස්වයංක්‍රීයව ඉදිරිපත් කිරීමේ අයදුම්පත

ස්වයංක්‍රීය ඉදිරිපත් කිරීමක යෙදුමක් වනුයේ පරිශීලකයා ස්වයංක්‍රීයව අනෙක් පිටුවට එම පිටුවට ඇතුළත් කරන ආකෘති අගයන් යොමු කිරීමයි. එවැනි යෙදුමක් මෙසේ වනු ඇත:

fieldapost=<?php echo $_post['fielda'];>
if (fieldapost !="") {
document.write("<form name='form1' method='post' action='previouspage.php'>
  <input name='fielda' type='text' id='fielda' type='hidden'>
</form>");
document.getElementById('fielda').value=fieldapost;
form1.submit();
}

0

මෙන්න මම එය කරන ආකාරය.

function redirectWithPost(url, data){
        var form = document.createElement('form');
        form.method = 'POST';
        form.action = url;

        for(var key in data){
            var input = document.createElement('input');
            input.name = key;
            input.value = data[key];
            input.type = 'hidden';
            form.appendChild(input)
        }
        document.body.appendChild(form);
        form.submit();
    }

0

POST හෝ GET සමඟ හරවා යැවීම සඳහා jQuery ප්ලගිනය:

https://github.com/mgalante/jquery.redirect/blob/master/jquery.redirect.js

පරීක්ෂා කිරීම සඳහා, ඉහත .js ගොනුව ඇතුළත් කරන්න හෝ ඔබේ කේතයට පන්තිය පිටපත් කරන්න / අලවන්න, ඉන්පසු මෙහි කේතය භාවිතා කරන්න, ඔබේ විචල්‍ය නම් සමඟ "ආග්ස්" සහ "විචල්‍යයන්" අදාළ විචල්‍යයන්ගේ අගයන් සමඟ ආදේශ කරන්න:

$.redirect('demo.php', {'arg1': 'value1', 'arg2': 'value2'});

මෙයද මෙහි සඳහන් කර ඇත: stackoverflow.com/questions/8389646/…
OG Sean

0

ඉහත විසඳුම් කිසිවක් ගැඹුරු කැදැලි පරාමිතීන් jQuery සමඟ හසුරුවා නැත, එබැවින් මෙන්න මගේ ශත දෙකේ විසඳුම.

ඔබ jQuery භාවිතා කරන්නේ නම් සහ ඔබට ගැඹුරු කැදැලි පරාමිතීන් හැසිරවීමට අවශ්‍ය නම්, ඔබට පහත ශ්‍රිතය භාවිතා කළ හැකිය:

    /**
     * Original code found here: https://github.com/mgalante/jquery.redirect/blob/master/jquery.redirect.js
     * I just simplified it for my own taste.
     */
    function postForm(parameters, url) {

        // generally we post the form with a blank action attribute
        if ('undefined' === typeof url) {
            url = '';
        }


        //----------------------------------------
        // SOME HELPER FUNCTIONS
        //----------------------------------------
        var getForm = function (url, values) {

            values = removeNulls(values);

            var form = $('<form>')
                .attr("method", 'POST')
                .attr("action", url);

            iterateValues(values, [], form, null);
            return form;
        };

        var removeNulls = function (values) {
            var propNames = Object.getOwnPropertyNames(values);
            for (var i = 0; i < propNames.length; i++) {
                var propName = propNames[i];
                if (values[propName] === null || values[propName] === undefined) {
                    delete values[propName];
                } else if (typeof values[propName] === 'object') {
                    values[propName] = removeNulls(values[propName]);
                } else if (values[propName].length < 1) {
                    delete values[propName];
                }
            }
            return values;
        };

        var iterateValues = function (values, parent, form, isArray) {
            var i, iterateParent = [];
            Object.keys(values).forEach(function (i) {
                if (typeof values[i] === "object") {
                    iterateParent = parent.slice();
                    iterateParent.push(i);
                    iterateValues(values[i], iterateParent, form, Array.isArray(values[i]));
                } else {
                    form.append(getInput(i, values[i], parent, isArray));
                }
            });
        };

        var getInput = function (name, value, parent, array) {
            var parentString;
            if (parent.length > 0) {
                parentString = parent[0];
                var i;
                for (i = 1; i < parent.length; i += 1) {
                    parentString += "[" + parent[i] + "]";
                }

                if (array) {
                    name = parentString + "[" + name + "]";
                } else {
                    name = parentString + "[" + name + "]";
                }
            }

            return $("<input>").attr("type", "hidden")
                .attr("name", name)
                .attr("value", value);
        };


        //----------------------------------------
        // NOW THE SYNOPSIS
        //----------------------------------------
        var generatedForm = getForm(url, parameters);

        $('body').append(generatedForm);
        generatedForm.submit();
        generatedForm.remove();
    }

මෙන්න එය භාවිතා කරන ආකාරය පිළිබඳ උදාහරණයක්. HTML කේතය:

<button id="testButton">Button</button>

<script>
    $(document).ready(function () {
        $("#testButton").click(function () {
            postForm({
                csrf_token: "abcd",
                rows: [
                    {
                        user_id: 1,
                        permission_group_id: 1
                    },
                    {
                        user_id: 1,
                        permission_group_id: 2
                    }
                ],
                object: {
                    apple: {
                        color: "red",
                        age: "23 days",
                        types: [
                            "golden",
                            "opal",
                        ]
                    }
                },
                the_null: null, // this will be dropped, like non-checked checkboxes are dropped
            });
        });
    });
</script>

ඔබ පරීක්ෂණ බොත්තම ක්ලික් කළහොත්, එය පෝරමය පළ කරනු ඇති අතර ඔබට පහත සඳහන් අගයන් POST හි ලැබෙනු ඇත:

array(3) {
  ["csrf_token"] => string(4) "abcd"
  ["rows"] => array(2) {
    [0] => array(2) {
      ["user_id"] => string(1) "1"
      ["permission_group_id"] => string(1) "1"
    }
    [1] => array(2) {
      ["user_id"] => string(1) "1"
      ["permission_group_id"] => string(1) "2"
    }
  }
  ["object"] => array(1) {
    ["apple"] => array(3) {
      ["color"] => string(3) "red"
      ["age"] => string(7) "23 days"
      ["types"] => array(2) {
        [0] => string(6) "golden"
        [1] => string(4) "opal"
      }
    }
  }
}

සටහන: ඔබට වර්තමාන පිටුවට වඩා වෙනත් යූආර්එල් වෙත පෝරමය පළ කිරීමට අවශ්‍ය නම්, ඔබට පෝස්ට්ෆෝම් ශ්‍රිතයේ දෙවන තර්කය ලෙස යූආර්එල් නියම කළ හැකිය.

උදාහරණයක් ලෙස (ඔබේ උදාහරණය නැවත භාවිතා කිරීමට):

postForm({'q':'a'}, 'http://example.com/');

මෙය උපකාරී වේ යැයි සිතමි.

සටහන 2: කේතය යළි-යොමුවීමේ ප්ලගිනයෙන් ලබාගෙන ඇත. මම මූලික වශයෙන් එය මගේ අවශ්‍යතා සඳහා සරල කළෙමි.


0

උත්සාහ කරන්න

function post_to_url(url, obj) {
  let id=`form_${+new Date()}`;
  document.body.innerHTML+=`
    <form id="${id}" action="${url}" method="POST">
      ${Object.keys(obj).map(k=>`
        <input type="hidden" name="${k}" value="${obj[k]}">
      `)}
    </form>`
  this[id].submit();  
}

// TEST - in second param object can have more keys
function jump() { post_to_url('https://example.com/', {'q':'a'}); }
Open chrome>networks and push button:
<button onclick="jump()">Send POST</button>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.