Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.06.2016, 14:33
Аспирант
Отправить личное сообщение для innowed Посмотреть профиль Найти все сообщения от innowed
 
Регистрация: 27.03.2015
Сообщений: 78

почему iframe считается кроссбраузерным способом передачи параметров без перезагрузки
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);
}

Последний раз редактировалось innowed, 24.06.2016 в 14:48.
Ответить с цитированием
  #2 (permalink)  
Старый 24.06.2016, 15:12
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

работа с iframe может быть запрещена политкой сервера
Мой пример https://fiddle.jshell.net/vlasenkofedor/x4hzzow2/
существует 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);
    }
Ответить с цитированием
  #3 (permalink)  
Старый 24.06.2016, 15:25
Аспирант
Отправить личное сообщение для innowed Посмотреть профиль Найти все сообщения от innowed
 
Регистрация: 27.03.2015
Сообщений: 78

Сообщение от Poznakomlus Посмотреть сообщение
работа с iframe может быть запрещена политкой сервера
Мой пример https://fiddle.jshell.net/vlasenkofedor/x4hzzow2/
существует 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);
}
Ответить с цитированием
  #4 (permalink)  
Старый 24.06.2016, 16:08
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

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

если файл передавать не требуется, то XMLHttpRequest вполне достаточно
Ответить с цитированием
  #5 (permalink)  
Старый 24.06.2016, 16:55
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Сообщение от innowed
т.е. мой код и есть 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);
            }
        },
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
способы передачи данных на сервер без перезагрузки страницы linklee Общие вопросы Javascript 11 16.05.2016 19:42