سؤال

أود أن تخزين سلمان الاستجابة في عالمي متغير لذا يمكن استخدامه من خلال التطبيق دون getJSON طلب أكثر من مرة.

var data;
$.getJSON("panorama.json",function(json){
data = json.images[0].src;
console.log(data);          
});


console.log(data);

لو سجل في الطلب الفعلي لا بأس به, ولكن يمكنني الحصول على "معرف" في كل مكان آخر.أي تعليق محل تقدير.

تحرير [نسخه من تعليقات]:حاولت ...

$.myglobals = { result: "unset" } 

$(document).ready(function() { 

  $.getJSON( "panorama.json", function(json) { 
    $.myglobals.result = json.images[0].src; 
    console.log($.myglobals.result);     
  });

  console.log($.myglobals.result); 
}) ;

أول سجل حسنا, والثاني هو غير معروف.

تحرير [نسخه من الجواب]:

في الواقع على حد سواء طريقة عمل

الشيء المثير للاهتمام هو أن بلدي طلب الحصول على وظيفة و حاولت إلى الق بلدي العالمية متغير صحيح بعد طلب في نفس الوظيفة

عندما accesed خارج الدالة وهي تعمل مثل السحر

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

المحلول

إذا كان لديك رمز حقيقي منظم مثل ذلك ثم لديك مشكلة مع محاولة الوصول إلى البيانات التي لم يتم تعيين بعد.فقط لأن $.getJSON() فوق console.log() لا يعني أن تحصل على استجابة من قبل تسجيل البيانات القيمة.

لذلك المشكلة ليست في نطاق وإنما التوقيت:أعرض بعض من جانب الخادم تأخر الحل قد تحطم.

ربما يجب تعيين بعض العلم إذا رد:

var data, dataReceived = false;

$.getJSON("panorama.json",function(json){
  data = json.images[0].src;
  dataReceived = true;
  console.log(data);                    
});


// somwhere later
if (dataReceived) {
  console.log(data);
} else {
  // you could use setTimeout() or setInterval here to re-check
  console.log("data not received yet");
}

نصائح أخرى

هل يمكن أن أدخله سمة في DOM (مثل #ID) واسترجاعها عند الحاجة.

وهنا هو النهج الذي يتيح لك تعيين متغير في واحدة $ (الوثيقة) .ready () واستخدامها في مختلف $ (الوثيقة) .ready (). myglobals هو كائن مساحة مما يقلل يمكن القول إن فرص متغير العمومي الاصطدام مع شخص آخر، خاصة إذا سمها ما شئت شيء أكثر ذكاء من "myglobals."

$.myglobals = {
  result: "unset" 
}

$(document).ready(function() {

  function pretend_JSON_call() {
    $.myglobals.result = {'a':"hello", 'b':"world" };
  }

  pretend_JSON_call();
});

$(document).ready(function() {
  alert($.myglobals.result['a']);
  alert($.myglobals.result['b']);
});

صلة عابر لرمز أعلاه في jsbin.

و$. getJSON حرائق طلب اياكس (الكلمة في نطاق السؤال كونه غير المتزامن) المتغير الخاص بك سوف يتم تعريف لأنه لم تحدد بعد، فإن الاستجابة لم تنته. اقترح الآخرين تتحرك console.log بك إلى مزيد من الانخفاض في التعليمات البرمجية، ولكن ليس هناك ضمان أنها ستكون صالحة للاستعمال إلا إذا مزامن المنطق الخاص مع وظيفة الاستدعاء. $ .getJSON تقبل دالة رد باعتباره واحدا من معالمها.

$.getJSON( "myData.json", function( data ) {
    //Do whatever, this is a callback
    $.each( data, function(key, val) {
       //You can get even more specific like so
    });
});
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top