سؤال

كيف يمكنني نشر البيانات ديناميكيًا إلى iframe في jQuery.

أحتاج حقًا إلى نشر البيانات إلى iframe في هذه الحالة ، لا يمكنني استخدام $ .post لأنه يتم إرجاع البيانات المستلمة بالتتابع (مخزنة)

إذا كان لديك حل لجعل بيانات مقبض jQuery يتم إرجاعها بواسطة $ .post 'عندما تتلقى البيانات. انا فضولي جدا!

في الوقت الحالي ، أتعامل معها بهذه الطريقة:

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؟

هل كانت مفيدة؟

المحلول 2

حسنًا ، لذلك على ما يبدو غير موجود ، قمت بإنشاء الحل الخاص بي. مشاركتها هنا في حالة يريد أي شخص النشر إلى iframe في jQuery.

وظيفة JS/ تشبه الفئة:

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);
        }
}

والنتيجة كما هو متوقع:

تقوم وحدة التحكم في الإطار الرئيسي بإخراج السلسلة "تعمل ..." كل 350 مللي ثانية تبدأ على الفور ، حتى لو كان PHP لا يزال قيد التشغيل.

عند الانتهاء من PHP لإرسال القطع ، فإنه ببساطة يزيل النموذج المؤقت والإيفرة المؤقتة.

نصائح أخرى

تنشئ هذه الوظيفة نموذجًا مؤقتًا ، ثم إرسال البيانات باستخدام 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();
}

الهدف هو "الاسم" attr of the target iframe ، والبيانات هي كائن JS:

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

إما يمكنك استخدام طريقة الهدف أو استخدام 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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top