شرح - jquery ajax post



تحذير متزامن XMLHttpRequest و<script> (4)

استكمال: وقد تم إصلاح هذا في jQuery 3.x. إذا لم تكن لديك إمكانية للترقية إلى أي إصدار أعلى من 3.0 ، فيمكنك استخدام المقتطف التالي ولكن عليك أن تدرك الآن أنك ستفقد سلوك مزامنة تحميل النص في المحتوى المستهدف.

يمكنك إصلاحه ، مع تعيين خيار المتزامن صراحة لطلب xhr إلى true :

$.ajaxPrefilter(function( options, original_Options, jqXHR ) {
    options.async = true;
});

https://code.i-harness.com

أتلقى رسالة تحذير:

تم إهمال XML متزامن XMLHttpRequest على مؤشر الترابط الرئيسي بسبب آثاره الضارة إلى تجربة المستخدم النهائي. لمزيد من المساعدة ، راجع http://xhr.spec.whatwg.org/ .

عند تنفيذ طلب AJAX غير متزامن يحتوي على برنامج نصي (يحتوي على src محلي) ، والذي يتم حقنه في HTML ، باستخدام أسلوب $.html() . لقد قمت بتغيير البرنامج النصي المحدد لاحتواء async="async" ، ومع ذلك تظل رسالة التحذير قائمة.

لقد بدأت في تصحيح المشكلة لاكتشاف أنه تمت معالجة <script> الملحقة من خلال اتصال jquery AJAX من jQuery.ajaxTransport ( http://code.jquery.com/jquery-1.10.0.js ، # 8663) ، حيث async تم تعيينه على " false (وهذا هو المكان الذي تأتي منه المشكلة).

الآن - ما الذي يمكنني فعله حيال ذلك؟

تظهر الرسالة في أحدث إصدار من Chrome بالإضافة إلى Firefox.

في حين لا يمكنني تقديم حالة اختبار على jsfiddle ، فإليك حالة اختبار تعرض المشكلة:

test.html

<html>
<body>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.3.js"></script>
<script>
$(document).ready(function(){
    $.ajax({
        url: '/response.html',
        success: function(response){
            $(document.body).html(response);
        }
    })
});
</script>
</body>
</html>

response.html

<script type="text/javascript" src="/json.js" async="async"></script>

json.js

console.log('hi');

طلب AJAX ليس ضروريًا لبدء التحذير - كل ما يلزم هو إدخال <script>

test2.html

<html>
<body>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.3.js"></script>
<script>
$(document).ready(function(){
    $(document.body).html('<script type="text/javascript" src="/json.js" async="async"><\/script>');
});
</script>
</body>
</html>

من الجدير بالذكر أن هذا قد تم إصلاحه ، لكل https://github.com/jquery/jquery/issues/2060


إذا كنت بحاجة فقط لتحميل البرنامج النصي لا أفعل كما رفع الصوت عاليا

$(document.body).html('<script type="text/javascript" src="/json.js" async="async"><\/script>');

جرب هذا

var scriptEl = document.createElement('SCRIPT');
    scriptEl.src = "/module/script/form?_t="+(new Date()).getTime();
    //$('#holder').append(scriptEl) // <--- create warning
    document.body.appendChild(scriptEl);

حتى أحدث jQuery لها هذا الخط ، لذلك لديك هذه الخيارات:

  • غيّر مصدر jQuery بنفسك - ولكن ربما يكون هناك سبب وجيه لاستخدامه
  • مع التحذير ، يرجى ملاحظة أن هذا الخيار قد تم إيقافه وليس مهملاً .
  • غيّر رمزك ، لذلك لا يستخدم هذه الوظيفة

أعتقد أن الرقم 2 هو أكثر الإجراءات منطقية في هذه الحالة.

بالمناسبة إذا لم تكن قد جربت بالفعل ، جرب هذا: $.ajaxSetup({async:true}); ، لكنني لا أعتقد أنها ستنجح.


في حالتي ، كان السبب وراء هذا البرنامج النصي المرنة هو جزء من تطبيق "CDNJS Selections" المقدم من Cloudflare .

وفقا ل Cloudflare "يتم إيقاف هذا التطبيق في مارس 2015". أوقفتها واختفت الرسالة على الفور.

يمكنك الوصول إلى التطبيقات من خلال زيارة https://www.cloudflare.com/a/cloudflare-apps/yourdomain.com





ajax