jQuery $ .getscript - وظائف ومتغيرات قديمة في البرنامج النصي المنفذ
سؤال
أقوم بتنفيذ JavaScript مع jQuery $ .getScript. في البرنامج النصي الذي تم تنفيذه ، لم أتمكن من الوصول إلى وظائف ومتغيرات ملف المصدر الخاص بي.
هل هناك حل؟
المحلول
البرنامج النصي الذي تم تنفيذه بواسطة $ .getScript () يفعل يمكنك الوصول إلى السياق العالمي. يمكنك استخدام أي متغير عالمي (أو وظيفة لهذه المسألة) من داخل البرنامج النصي الخارجي.
نصائح أخرى
Nick Craver ، أنا فقط أقضي 3 ساعات (!) في هاجس لماذا لن ينجح شيء ، وقد أعطتني البصيرة التي أحتاجها لجعلها تعمل.
xoxoxoxoxoxo
من المثير للاهتمام أن نلاحظ:
يمكنك إعلان متغير مثل jQuery var مثل هذا:
$variableName = something;
وبهذه الطريقة ، يمكن لـ JQuery الوصول إليها من أي مكان في النطاق.
$(function(){
$alertString = 'Hello World';
$.getScript('test.js', function(){
// do nothing
});
}
test.js:
alert( $alertString );
لقد وجدت الإجابة هنا مفيدة لفهم الموضوع ، لكنني ما زلت لا أستطيع أن أجعله يعمل في سياقتي حتى حدث ذلك هذه المقالة على TechMonks:
عندما أقوم بنسخ/لصق مثالهم النهائي في رأس ملف .js الرئيسي الخاص بي ، كل شيء نجح. بالنسبة لي على الأقل ، تم كسر وظيفة $ .getScript () ، وهذا هو الإصلاح:
jQuery.extend({
getScript: function (url, callback) {
var head = document.getElementsByTagName("head")[0] || document.documentElement;
var script = document.createElement("script");
script.src = url;
// Handle Script loading
{
var done = false;
// Attach handlers for all browsers
script.onload = script.onreadystatechange = function () {
if (!done && (!this.readyState || this.readyState === "loaded" || this.readyState === "complete")) {
done = true;
//success();
//complete();
if (callback) callback();
// Handle memory leak in IE
script.onload = script.onreadystatechange = null;
if (head && script.parentNode) {
head.removeChild(script);
}
}
};
}
head.insertBefore(script, head.firstChild);
return undefined;
}
});