Вход

Просмотр полной версии : почему iframe считается кроссбраузерным способом передачи параметров без перезагрузки


innowed
24.06.2016, 14:33
2 дня пытался понять, как с помощью Iframe передавать параметры на сервер, написал такой код:

<script>
function send(params, action){
var ifr = document.createElement('iframe');
var targ = 'i'+parseInt(Math.random()*100);
ifr.name = targ;
ifr.src = action;
ifr.style.display='none';
document.body.appendChild(ifr);

var form = document.createElement('form');
form.method = 'post';
form.action = action;
form.target = targ;

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

form.submit();
}
send({parametr: "test"}, 'http://127.0.0.1:8080');
</script>

Проверял я этот код на node.js
var http = require('http');
var url = require('url');

var server = new http.Server(function(req, res){
console.log(req.method, req.url);

var urlParsed = url.parse(req.url);
console.log(urlParsed.query);
res.end;
});

server.listen(8080, '127.0.0.1')

А потом ради любопытства я просто начал вставлять любые элементы, у которых есть атрибут src и так же в консоле ловил параметры, так почему нужно использовать iframe? Может я что-то неправильно делаю?
function send(){
var image = document.createElement('img');
image.src="http://127.0.0.1:8080?vasya=2";
document.body.appenChild(image);
}

Vlasenko Fedor
24.06.2016, 15:12
работа с iframe может быть запрещена политкой сервера
Мой пример https://fiddle.jshell.net/vlasenkofedor/x4hzzow2/
существует JSONP (https://ru.wikipedia.org/wiki/JSONP)
динамически вставляем script c нужным src (в нем параметры GET передаем)
сервер разберет параметры и в ответ сформирует код js
когда скрипт загрузится он выполнит нужные нам действия(функцию, calback)
function send(msg) {
var el = document.createElement('script');
el.src = "http://site/fs.php?f=" + msg;
document.body.appendChild(el);
}

innowed
24.06.2016, 15:25
работа с iframe может быть запрещена политкой сервера
Мой пример https://fiddle.jshell.net/vlasenkofedor/x4hzzow2/
существует JSONP (https://ru.wikipedia.org/wiki/JSONP)
динамически вставляем script c нужным src (в нем параметры GET передаем)
сервер разберет параметры и в ответ сформирует код js
когда скрипт загрузится он выполнит нужные нам действия(функцию, calback)
function send(msg) {
var el = document.createElement('script');
el.src = "http://site/fs.php?f=" + msg;
document.body.appendChild(el);
}

т.е. мой код и есть jsonp?
1
function send(){
var image = document.createElement('img');
image.src="http://127.0.0.1:8080?vasya=2";
document.body.appenChild(image);
}

Яростный Меч
24.06.2016, 16:08
iframe - единственный кроссбраузерный (включая совсем старые ie) способ передать выбранный файл без перезагрузки страницы.

если файл передавать не требуется, то XMLHttpRequest вполне достаточно

Vlasenko Fedor
24.06.2016, 16:55
т.е. мой код и есть jsonp
скорее загрузчик :) (понятно что так параметры можно передавать)
но без обработки входящих данных это обычны подзарузчик контента, который сохраняется в кеше для дальнейшего использования

loadBefore: function (href) {
if (navigator.appName.indexOf("Microsoft") !== -1) {
(new Image()).src = href;
} else {
var obj = doc.createElement("object");
obj.width = 0;
obj.height = 0;
obj.data = href;
doc.body.appendChild(obj);
}
},