سؤال

موقع أنا أعمل على (باستخدام AS2 لأنه تغذية rss) لديها أكبر مؤشر .ملف swf أن الأحمال الفرعية باستخدام صناديق الثروة السيادية loadMovie("foo1.swf", placeToShowSwf).هناك foo1.swf من خلال 4, هو أمر سخيف لأن الشيء الوحيد الذي يختلف بينهما هو رقم واحد في عنوان ملف xml التي يروي ماذا تحميل المحتوى.لذلك أريد أن تقلل من هذا إلى ملف واحد مع وظيفة بسيطة أن مؤشر الملف المكالمات لتحميل ملف xml كما نرى هنا.

function setFooNum(i:Number) {
   fooNum = i;
   //my_xml = new XML();  edit: this line has since been removed and is kept for historical purposes
   my_xml.load("foo"+fooNum+".xml");
};

ومع ذلك, لسبب ما, ملف xml لن يتم تحميل.تحميل بشكل صحيح خارج الوظيفة ، ولكن هذا لا تفيدني كثيرا.فإنه يغير fooNum بشكل صحيح, ولكن هذا لا تفعل لي أي جيدة إذا كان الخطأ في ملف xml هو بالفعل التحميل.بقدر ما استطيع ان اقول ، رمز يتصرف كما لو my_xml.load("foo"+fooNum+".xml") ليس هناك على الإطلاق.

هل هذا نوع من التدبير الأمني لا أدري عن هل هناك طريقة حول ذلك ؟

تحرير كما العديد من الناس إلى الخروج ، my_xml = new XML() الخط كان الجاني.للأسف أنا الآن الحصول على جديدة ومثيرة خطأ.عندما setFooNum(i) ويطلق على الفور بعد loadMove() في مؤشر الملف ، trace(fooNum) داخل setFooNum() وظيفة المطبوعات التي fooNum يتم تعيين بشكل صحيح, ولكن trace(fooNum) داخل onLoad() (والتي ترجع النجاح على الرغم من التحميل على ما يبدو لا شيء ، راجع للشغل) يدل على أن fooNum غير معرف!أيضا, أنا جعلت زر في مؤشر swf أن المكالمات setFooNum(3) (لأغراض التصحيح) ، والتي لسبب ما يجعلها تعمل بشكل جيد.حتى الانتظار بضع ثوان الملف لتحميل يبدو أن حل المشكلة, ولكن هذا قبيحة بشكل لا يصدق الحل.

فكيف يمكنني الانتظار حتى يتم تحميلها بالكامل قبل أن يدعو setFooNum()?

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

المحلول

ربما يجب عليك التأكد من أن لديك الإذن المناسب في crossdomain.xml.إذا كان الخاص بك crossdomain الملف رفعوا أيا من الطلبات الخاصة بك سوف تذهب من خلال.

http://crossdomainxml.org/

نصائح أخرى

وظيفة الخاص بك هو خلق جديد XML سبيل المثال في كل مرة ، ونتيجة لذلك سوف تحتاج إلى تحديد onLoad وظيفة كل مرة كذلك ، إذا كنت إعادة استخدام نفس XML سبيل المثال فإنك لن تحتاج إلى إعادة تعريف الدالة, على سبيل المثال

var iFooNum:Number;
var oXML:XML = new XML();

oXML.onLoad = function (success:Boolean) {
  if(success) {
    //Do Something with XML.
  }
}

loadFooNum = function(i:Number) {
  iFooNum = i;
  oXML.load("foo" + i + ".xml");
}

إذا كان الخاص بك تحميل ملف XML من مجال مختلف سوف تحتاج إلى crossdomain.xml الملف على المجال للسماح فلاش تحميل ملف XML.

على افتراض تعريف الحدث onLoad hanlder الخاص بك XMLinstance خارج الوظيفة ، يمكنك إزالة إعلان سبيل المثال من خلال وظيفة الجسم:

function setFooNum(i:Number) {
    fooNum = i;
    my_xml.load("foo"+fooNum+".xml");
};

هذا البرنامج التعليمي على kirupa الموقع يمكن أن تساعدك.

http://www.kirupa.com/web/xml/index.htm

وهذا ما يفسر كيفية العمل مع XML.نأمل أن يكون هذا يساعدك على الحصول على الجواب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top