Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Отправка POST через JS без перехода на другую страницу (https://javascript.ru/forum/misc/8775-otpravka-post-cherez-js-bez-perekhoda-na-druguyu-stranicu.html)

m-mikle 12.04.2010 17:38

Отправка POST через JS без перехода на другую страницу
 
Мне нужно, чтобы JS отправил POST'ом необходимые переменные. Но при этом не должно быть перехода на другую страницу (То есть это не "submit()") и никаких данных возвращаться не должно. Просто POST отправка.

Для примера можно отправить переменную "abc" со значением "def" на "http://192.168.1.1/page.php" (Который уже сам сделает все остальное).

Как такое сделать?

B@rmaley.e><e 12.04.2010 17:49

Создаем невидимый фрейм, форму, устанавливаем форме атрибуты method="post", action="http://192.168.1.1/page.php", target равный name (или id?) фрейма, наполняем нужными данными и... submit();

m-mikle 12.04.2010 17:56

Цитата:

Сообщение от B@rmaley.e><e (Сообщение 51319)
Создаем невидимый фрейм, форму, устанавливаем форме атрибуты method="post", action="http://192.168.1.1/page.php", target равный name (или id?) фрейма, наполняем нужными данными и... submit();

Да, но мне будет нужно отправить переменную со значением window.location.host , а во фрейме она даст адрес этого фрейма. Как тогда?

B@rmaley.e><e 12.04.2010 18:11

Вообще-то сама форма не будет находиться во фрейме. Она вообще может находиться в сферическом вакууме (т.е. не являться потомком какого-либо элемента) должна быть элементом DOM'а. Это во-первых.
Во-вторых, значение вы задаете один раз и оно ни к чему не привязано. Само собой, оно не изменится, когда запрос улетит во фрейм.

m-mikle 12.04.2010 18:14

Цитата:

Сообщение от B@rmaley.e><e (Сообщение 51326)
Вообще-то сама форма не будет находиться во фрейме. Она вообще может находиться в сферическом вакууме (т.е. не являться потомком какого-либо элемента).

Аааа... понял о чем вы :)

Но скрипт мне нужен для userjs (В Опере и Мозиле) и в нем нужно обойтись без document.write() (Т.к. тогда исчезает все, кроме написанного этой функцией). А фрейм и форму в страницу только document.write()'ом умею вставлять.

B@rmaley.e><e 12.04.2010 18:16

http://javascript.ru/tutorial/dom/mo...bavlenie-v-dom

Kolyaj 12.04.2010 18:18

Цитата:

Сообщение от B@rmaley.e><e
Она вообще может находиться в сферическом вакууме (т.е. не являться потомком какого-либо элемента).

Если она не будет в документе, то не отправится. По крайней мере в некоторых браузерах.

Цитата:

Сообщение от m-mikle
А фрейм и форму в страницу только document.write()'ом умею вставлять.

Так научитесь.

B@rmaley.e><e 12.04.2010 18:23

Цитата:

Сообщение от Kolyaj
Если она не будет в документе, то не отправится. По крайней мере в некоторых браузерах.

Точно, в FF так не отправляется.

m-mikle 12.04.2010 18:31

Цитата:

Сообщение от Kolyaj (Сообщение 51329)
Так научитесь.

Спасибо, учусь. Но тут вопросик.
Там дан пример на добавление LI к UL с id="list"
// элемент-список UL
var list = document.getElementById('list')

// новый элемент
var li = document.createElement('LI')
li.innerHTML = 'Новый элемент списка'

// добавление в конец
list.appendChild(li)


А если нужно добавить <iframe src="http://192.168.1.1/page.php" бла-бла ></iframe> в body ?

e1f 12.04.2010 19:06

m-mikle, ищем :)

m-mikle 12.04.2010 20:44

Короче, я уже что только не перепробовал, ничего не получается.

Весь замысел был в том, что бы JS отправлял на http://192.168.1.1/page.php либо POST'ом, либо GET'ом адрес текущей страницы, и при этом пользователь ничего не замечал.

Пытался и фрейм сделать с адресом
"http://192.168.1.1/page.php?url=" + window.location.host
А page.php ловит адрес GET'ом. Но ничего не работает.

Как все таки сделать???

Skipp 13.04.2010 10:42

var xmlHttp=connect();
function connect(){
  var xmlhttp;
  try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {
      xmlhttp = false;
    }
  }
  if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
    xmlhttp = new XMLHttpRequest();
  }
  return xmlhttp;
}
xmlHttp.open("GET","http://192.168.1.1/page.php?r="+Math.random()+"url="+window.location.host,true);
xmlHttp.send(null);

как-то так

m-mikle 13.04.2010 16:39

Цитата:

Сообщение от Skipp (Сообщение 51432)
<...>
как-то так

Хм... результата нет...

m-mikle 13.04.2010 16:45

Получилось сделать так:
var href = "http://192.168.1.3/page.php?url=" + window.location.href
href = href.replace('&', '(*)')
myImage = new Image()
myImage.src = href


replace для того, что бы символ "&" не заканчивал переменную в GET, а php перед занесением в БД уже обратно переведет.

НО
У меня Опера 10.51 сборка 3315 - все работает
На другом компе тоже Опреа 10.51 сборка 3315 - но не работает
192.168.1.3 это мой камп

Почему там не работает?
По БД видно, что изображение создается, но url в get'е пустое

exec 13.04.2010 18:11

var request = new XMLHttpRequest();
request.open('POST', 'http://192.168.1.1/page.php', true);
request.send('abc=def');

m-mikle 13.04.2010 18:23

Цитата:

Сообщение от exec (Сообщение 51486)
var request = new XMLHttpRequest();
request.open('POST', 'http://192.168.1.1/page.php', true);
request.send('abc=def');

Так не получается.

Вообщем-то меня и этот
var href = "http://192.168.1.3/page.php?url=" + window.location.href 
href = href.replace('&', '(*)') 
myImage = new Image() 
myImage.src = href
способ устраивает. Но я не понимаю, почему он на другом компе не работает?

Skipp 14.04.2010 09:19

пропустил в этой строке амперсанд=(
xmlHttp.open("GET","http://192.168.1.1/page.php?r="+Math.random()+"&url="+window.location .host,true);

m-mikle 14.04.2010 15:24

Цитата:

Сообщение от Skipp (Сообщение 51553)
пропустил в этой строке амперсанд=(
xmlHttp.open("GET","http://192.168.1.1/page.php?r="+Math.random()+"&url="+window.location .host,true);

Теперь работает, но в БД записываются только адреса 192.168.1.3, а остальные нет.
И скажите, пожалуцста зачем r=Math.random() ? И надо ли с ней что-то делать в page.php?


Часовой пояс GMT +3, время: 17:36.