Передача данных из яваскрипт методом POST

October 22, 2007 Web разработка

Бывает читаю javascript.about.com, а там случаются интересные записи.

Так вот.

Что мы делаем когда нужно послать из яваскипта юзера, передав данные post’ом?

Мы создаем форму:

<form method=post id=form_id>

<input type=hidden name=…>

</form>

Назначаем значения ее элементам:

document.getElementById(’form_id’)….value = …;

и, когда пользователь решится, вызываем:

document.getElementById(’form_id’).submit();

Можн, конечно, передавать данные через HttpRequest, если пользователя нужно оставить на странице. Но если его нужно послать подальше, причем через POST Стивен Чапмэн юзает свою функцию, которая автоматизирует создание формы для сабмита

// querystring to POST JavaScript
// copyright 15th October 2007 by Stephen Chapman
// permission to use this Javascript on your web page is granted
// provided that all of the code in this script (including these
// comments) is used without any alteration
function toPost(getString) 
{
 var parms = getString.split('?'); 
 var newF = document.createElement("form"); 
 newF.action = parms[0]; 
 newF.method = 'POST'; 
 var parms = parms[1].split('&'); 
 for (var i=0; i<parms.length; i++) 
 {
  var pos = parms[i].indexOf('='); 
  if (pos > 0) 
  {
   var key = parms[i].substring(0,pos); 
   var val = parms[i].substring(pos+1); 
   /*@cc_on @if (@_jscript)  
   var newH = document.createElement("<input name='"+key+"'>");  
   @else */  
   var newH = document.createElement("input"); 
   newH.name = key; /* @end @*/ 
   newH.type = 'hidden'; 
   newH.value = val; 
   newF.appendChild(newH);
  }
 } 
 document.getElementsByTagName('body')[0].appendChild(newF); 
 newF.submit();
}

С ней можно делать так:

<a href=”http://felgall.com/htmlt59.php?parmone=i&parmtwo=j” onclick=”toPost(this.href); return false;”>go</a>

Комментарии (11)

  1. Nikita

    Хитро, но в каком контексте может быть применимо?

  2. Evgeny Sergeev

    На сколько я понимаю в результате будет перезагружена страница?

  3. Michael de`OZ

    А как сделать так, что бы страница не перегружалась?

  4. jeka911

    2Evgeny Sergeev: да, или…

    2Michael de`OZ: если добавить на страницу iframe и немного переписать функцию, добавив в taget создаваемой формы id этого iframe’а, то action формы будет загружатся в ней. Такой себе архаичный ajax.

    2Nikita: Например почти вся моя работа делается на хостинге dreamhost, там есть скрипт рассылки, подписать юзера на которую можно только отправив его постом. Но подписываю я его чаще всего на форме регистрации, где есть чекбокс: получать новости от нас. Т.е. сразу после подтверждения email создается страница с формой, которая сразу же отправляется. С скрипта подписки юзер редиректится на страницу “Спасибо за регистрацию”.

  5. andrew

    интерестно, но меня интересует, если на форме есть iframe - ссылающийся на независимую страничку, а там генерится какой - нить глобальный параметр и я хочу его получить при отправке данных с формы, как твоя функция будет себя вести?

  6. jeka911

    andrew, прости, но я не понял, что ты имеешь ввиду.

  7. Scramble

    Здравствуйте, честной народ!
    Не встречалось ли вам что нибудь про оптимизацию постов на wordpress’е, какой нибудь хитрый скрипт, с проставлением ссылок кейвордов и .т.д?

  8. jeka911

    Чувак, по-конкретней надо. В любом случае не думаю, что есть что-то бесплатное и путевое.

  9. Scramble

    А что конкретней?Задаешь нужные кейворды, по ним-база ссылок, вводишь текст - а там дело техники!

    P.S.я не сильно просто говорю?

  10. jeka911

    По твоему описанию очень похоже вот это -
    http://wordpress.org/extend/plugins/cross-linker/

    но так как я не понял о чем ты, то и не знаю. Пошукай там по категориям - может найдешь чего интересного.

  11. Scramble

    ок спасибо!
    Будем искать

Добавить комментарий

Вход с one-face