Intereting Posts
Необходимость префиксации всех страниц PHP с помощью ob_start () PHP + JQuery – Как использовать эти два вместе? См. Мой пример PDO :: __ construct (): php_network_getaddresses: getaddrinfo не удалось: имя или услуга неизвестны Звездный рейтинг, реализующий интервал оценки Уилсона Начать задание на mySQL и PHP, чтобы избежать подключения к БД на каждой странице ошибка с использованием include_once с переменной php Является ли SPLFileObject атомарным? Нет PHP для больших проектов? Почему нет? добавление пространства имен при использовании SimpleXMLElement Как отправить общую сумму, подлежащую выплате в PayPal Проверьте, подключен ли пользователь к facebook, а затем проверьте, понравилась ли ему страница Внедрение оценки объектов выражения типа goMongoDB как правильно отправлять push-уведомления ZF2 + Doctrine2 – Fieldset в Fieldset коллекции в Fieldset не проверяется правильно Вернуть первый ключ ассоциативного массива в PHP

Как отправить данные в iframe с помощью JQuery

Как я могу динамически отправлять данные в iframe в JQuery.

Мне действительно нужно отправлять данные в iframe в этом случае, я не могу использовать $ .POST, потому что полученные данные возвращаются последовательно (буферизуются)

Если у вас есть обходной путь для обработки данных дескриптора jquery, возвращаемых $ .POST ', когда он получает данные. Мне очень любопытно!

В настоящий момент я обрабатываю его с помощью GETS следующим образом:

var iframe = $('<iframe style="display:none;"></iframe>'); $( "body" ).append(iframe); iframe.attr('src','server.php?type=getFolders&inode='+nodeData.inode).load(function(){$(this).remove()}); 

Это в основном создает временный iframe и позволяет PHP вводить в него javascript (используя ob_flush();flush(); ), пока он возвращает данные, а затем, когда он закончен, он просто удаляет iframe для очистки.

изнутри iframe я обращаюсь к основному фрейму с помощью window.parent. затем методы мэйнфрейма.

это идеально, но работает с GET, как я могу сделать эту работу с POST?

Эта функция создает временную форму, а затем отправляет данные с помощью jQuery:

 function postToIframe(data,url,target){ $('body').append('<form action="'+url+'" method="post" target="'+target+'" id="postToIframe"></form>'); $.each(data,function(n,v){ $('#postToIframe').append('<input type="hidden" name="'+n+'" value="'+v+'" />'); }); $('#postToIframe').submit().remove(); } 

target – это «имя» attr целевого iFrame, а данные – объект JS:

 data={last_name:'Smith',first_name:'John'} 

Хорошо, так как этого, по-видимому, не существует, я создал свое собственное решение. Разделите его здесь, если кто-то захочет POST для iFrame в jQuery.

js function / class-like:

 function iframeform(url) { var object = this; object.time = new Date().getTime(); object.form = $('<form action="'+url+'" target="iframe'+object.time+'" method="post" style="display:none;" id="form'+object.time+'" name="form'+object.time+'"></form>'); object.addParameter = function(parameter,value) { $("<input type='hidden' />") .attr("name", parameter) .attr("value", value) .appendTo(object.form); } object.send = function() { var iframe = $('<iframe data-time="'+object.time+'" style="display:none;" id="iframe'+object.time+'"></iframe>'); $( "body" ).append(iframe); $( "body" ).append(object.form); object.form.submit(); iframe.load(function(){ $('#form'+$(this).data('time')).remove(); $(this).remove(); }); } } 

тогда, когда вам нужно отправить форму во временный iframe:

 var dummy = new iframeform('server.php'); dummy.addParameter('type','test'); dummy.addParameter('message','Works...'); dummy.send(); 

Это файл примера server.php:

 if($_POST[type] == 'test') { header( 'Content-type: text/html; charset=utf-8' ); echo '<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>'; echo str_pad('',4096); //fill browser buffer for($i = 0; $i < 10; $i++) { echo '<script type="text/javascript">window.parent.console.log(\''.$_POST[message].'\');</script>'; ob_flush(); flush(); usleep(350000); } } 

И результат такой, как ожидалось:

консоль основного кадра выводит строку «Works …» каждые 350 мс, начиная сразу, даже если php все еще работает.

Когда php завершает отправку кусков, он просто удаляет временную форму и временный iframe.

Либо вы можете использовать целевой метод, либо использовать AJAX для вышеуказанной работы

 <form action="..." target="an_iframe" type="post"> <input type="text" name="cmd" placeholder="type a command here..." /> <input type="submit" value="Run!" /> </form> <iframe id="an_iframe"></iframe>