باستخدام jQuery للحصول على كائنات JSON من الملف المحلي

StackOverflow https://stackoverflow.com/questions/2792423

سؤال

أحاول الحصول على قائمة بكائنات JSON (المنتجات) من ملف محلي باستخدام jQuery وتخزين جميع الكائنات في صفيف واحد تسمى Allitems. تم تحديد الملف المشترك في نفس الدليل مثل الرمز ، ويسمى "allitems.json". إليك كيف أفعل ذلك الآن:

function getAllSupportedItems(){
    var allItems = new Array();
    $.getJSON("allItems.json",
         function(data){
             $.each(data.items, 
             function(item){
                 allItems.push(item);
             });
         });
    return allItems;
}

بناءً على هذا المثال: http://api.jquery.com/jquery.getjson/

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

المحلول

إلى عن على getAllSupportedItems لتكون قادرة على إرجاع أي عناصر ، تحتاج مكالمة AJAX إلى تشغيل متزامن.

getJSON يترجم إلى المكالمة غير المتزامنة التالية:

$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback
});

غير متزامن هو الافتراضي. لذلك تحتاج إلى تغيير طلبك بشكل صريح إلى واحد متزامن:

$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback,
  async: false
});

البديل هو إعادة التفكير في طريقة استخدامك getAllSupportedItems وجعلها في فائدة غير متزامنة:

function getAllSupportedItems(callback){
    $.getJSON("allItems.json",
         function(data){
             var allItems = [];
             $.each(data.items, 
             function(item){
                 allItems.push(item);
             });
             callback(allItems);
             // callback(data.items); should also work
         });
}

تحديث

عندما كتبت في البداية هذه الإجابة ، لم يكن لدى jQuery دعمًا مؤلفًا. إنه أكثر إيجازًا ومرونة في فعل شيء مثل هذا اليوم:

function getAllSupportedItems( ) {
    return $.getJSON("allItems.json").then(function (data) {
        return data.items;
    });
}

// Usage:
getAllSupportedItems().done(function (items) {
    // you have your items here
});

نصائح أخرى

كيف تستخدم هذا؟ إذا كنت تتوقع الوظيفة الرئيسية ("getAllSupportedItems") إلى إرجاع الصفيف الذي تصنعه ، حسنًا ، لن ينجح. ال $.getJSON الوظيفة هي غير متزامن, ، وبالتالي لن يقوم المعالج ببناء الصفيف فعليًا إلا بعد عودة الوظيفة الخارجية.

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