سؤال

لدي الكود التالي

function updateSliderContent(json) {  //<- json defined here is correct
   var screen_order = json.screen_order.split('_');
   jQuery.each(screen_order, function(i, item) {
      var screen_id = item;
      //at this point it is not, thus the function does not execute whatever is in the if blocks
      if (json[screen_id].action == 'add') {
         //doSomething  
      } else if (json[screen_id].action == 'remove') {
         //doSomthingElse
      };
   }
}

مشكلتي هي أنه يتم ضياع قيمة JSON (وهو كائن من مكالمة AJAX) في كل وظيفة من JQUERY. أنا لم أكتشف بعد السبب، ولا كيفية حلها. جوجل لا تعطيني الإجابة أبحث عنها.

تحرير 1.

هنا هي الدعوة الفعلية.

function updateSlider() {
   var screenOrder = '';
   jQuery('div#slider td').each(function(i, item) {
      screenOrder += this.abbr + '_';
   })
   var ajaxData = {
      sid: sid,
      story: story,
      date: theDate,
      screenOrder: screenOrder,
      mode: 'ajax_update_slider'
   };
   jQuery.ajax({
      data: ajaxData,
      dataType: 'json',
      success: function (json) {
         updateSliderContent(json);
      }
   });
   theDate = Math.round(new Date().getTime()/1000.0); //UNIX Timestamp
   sliderTimer = setTimeout('updateSlider();',15000);
};
هل كانت مفيدة؟

المحلول

لقد حاولت، وفشلت، لإعادة إنتاج مشكلتك على JS Bin:
http://jsbin.com/erha. (قابلة للتحرير عبر http://jsbin.com/erha/edit.)

يبدو الكود الذي أظهرته لنا حتى الآن على ما يرام تماما، لذلك يجب أن تكون المشكلة ناتجة عن بعض الجزء الآخر من التعليمات البرمجية أو النظام. نحن جميعا فقط اطلاق النار في الظلام إذا كنا لا نعرف ما المشكلة.

يرجى المحاولة وإعادة إنتاج المشكلة http://jsbin.com. ويمكننا مساعدتك من هناك.

إكمال شفرة المصدر

index.html.

<!doctype html>
<html lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>http://stackoverflow.com/questions/1831384/javascript-variable-value-gets-lost-between-functions</title>
    <script type="text/javascript" src="http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <script type="text/javascript">
      $.ajaxSetup({url: 'test.json'});

      function updateSliderContent(json) {  //<- json defined here is correct
        var screen_order = json.screen_order.split('_');
        jQuery.each(screen_order, function(i, item) {
          var screen_id = item;
          //at this point it is not, thus the function does not execute whatever is in the if blocks
          if (json[screen_id].action == 'add') {
            console.log(screen_id, 'action add');
          } else if (json[screen_id].action == 'remove') {
            console.log(screen_id, 'action remove');
          };
        });
      }

      function updateSlider() {
        var ajaxData = {};
        jQuery.ajax({
          data: ajaxData,
          dataType: 'json',
          success: function (json) {
            updateSliderContent(json);
          }
        });
        // theDate = Math.round(new Date().getTime()/1000.0); //UNIX Timestamp
        sliderTimer = setTimeout('updateSlider();',15000);
      };

      $(updateSlider);
    </script>
  </head>
  <body>
  </body>
</html>

test.json.

{
  'screen_order': 'foo_bar_baz',
  'foo': {
    'action': 'add'
  },
  'bar': {
    'action': 'add'
  },
  'baz': {
    'action': 'remove'
  }
}

نصائح أخرى

يبدو أن هناك خاطئة في JQuery.Ask كما لا أستطيع إعادة إنتاج مشكلتك.

        function alertName (json) {
            var a = new Array();
            a.push(1);
            a.push(2);

            jQuery.each(a, function(i, item) {
                alert(json[0].name);
                alert(json[1].name);
            });
        }

        var andre = { name: "André" }
        var joana = { name: "Joana" }

        var arrayOfJson = new Array();
        arrayOfJson.push(andre);
        arrayOfJson.push(joana);

        alertName(arrayOfJson);

alertName() تعمل الوظيفة تماما كما ينبغي. لم يتم فقد المعلمة JSON داخل jQuery.each وظيفة

يبدو أن مشكلة في تنفيذك، وهو شيء لا تخبرنا عنه. يرجى محاولة "ضغط" مشكلتك لعينة العمل كما فعلت وأظهر لنا حتى نتمكن من المحاولة بمفردنا :)

هل أنت واثق json هو كائن. ربما لها سلسلة json؟ مما يجب عليك eval قبل الاستخدام.
إذا حصلت عليه عبر $.ajax() دعوة لا تنسى إضافة dataType:'json' كخيار...

صينية في إذا() جملة لاستخدامها البند, ، لأنه إذا كانت بيانات JSON هي صفيف من الكائنات، غرض سوف تحتوي على كل كائن، ولكن هذا هو فقط افتراضي

أعتقد أنك يجب أن تتأكد من الوظيفة UpdateLiderContent. يسمى بعد استجابة JSON من جانب الخادم.

لا ينبغي أن تعمل الرمز أدناه:

    var json = {};

    $.getJSON("/url/", {}, function(data){
        json = data;
    });

    //we call our function before the server response
    //and the json will be just blank object
    updateSliderContent ( json );

لذلك، يرجى إلقاء نظرة على التعليمات البرمجية الخاصة بك لأننا في بعض الأحيان فعلنا شيئا من هذا القبيل دون نية.

يجب أن يعمل الرمز أدناه ويجب ألا يكون كائن JSON فارغا إذا استجاب الخادم حقا JSON الصحيح.

    $.getJSON("/url/", {}, function(json){
        //we call only after the response from server
        updateSliderContent ( json );
    });
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top