شرح - 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