यह मेरा पहला प्रश्न है, आगे के प्रश्नों पर किसी भी सुझाव की सराहना की जाएगी।

तालिका को अद्यतन करने के लिए निम्न कोड का उपयोग करते समय मुझे कोई अपडेट नहीं दिखाई देता है, हालांकि TableList = {} को सफलता फ़ंक्शन में ले जाने पर, तालिका अपेक्षित रूप से अपडेट हो जाएगी।

क्या कोई मुझे इस बात का स्पष्टीकरण दे सकता है कि मुझे ऑब्जेक्ट के खाली होने को सक्सेस ब्लॉक में स्थानांतरित करने की आवश्यकता क्यों है?

मैंने जो उत्तर पढ़े हैं, वे मुझे बेहतर ढंग से समझने में मदद नहीं करते हैं।

function GetTableData() {
    TableList = {};

    $.ajax({
        url: "http://localhost:3000/info/",
        success: function (result) {

            //Moiving 'TableList = {}' here works fine

            for (var i = 0; i < result.length; i++) {

                TableList[i] = result[i];

            }
        }
    });
}

function UpdateTable() {
    GetTableData()
    //Update table cells
    setTimeout(function () {
        UpdateTable();
    }, 1000);
}
0
greenSacrifice 27 सितंबर 2018, 12:04

1 उत्तर

सबसे बढ़िया उत्तर

$.ajax अतुल्यकालिक है, इसलिए प्रतिक्रिया "बाद में" आती है

आप GetTableData() को कॉल करते हैं ...

  • पहली बात यह स्पष्ट है TableList
  • दूसरी चीज जो यह करता है वह है एसिंक्रोनस कॉल शुरू करना
  • फिर लौट आता है
  • आपका कोड तब EMPTY TableList का उपयोग करके अपडेट होता है (क्योंकि यह अभी तक भरा नहीं गया है)
  • कुछ समय बाद, टेबललिस्ट भर जाती है
  • एक सेकंड बाद में, फलहीन लूप दोहराएं

एक उपाय यह है

function GetTableData(callback) {
    $.ajax({
        url: "http://localhost:3000/info/",
        success: callback
    });
}

function UpdateTable() {
    GetTableData(function(TableList) {
        //Update table cells
        setTimeout(UpdateTable, 1000);
    });
}

अब निम्नलिखित होता है

  • GetTableData () को कॉल करें
  • अजाक्स शुरू होता है
  • जब डेटा प्राप्त होता है, तो सफलता फ़ंक्शन पहले तर्क के रूप में प्रतिक्रिया के साथ कॉलबैक को कॉल करता है
  • आपका कॉलबैक कोड टेबल सेल को अपडेट करता है
  • फिर एक टाइमआउट शुरू करता है पूरी बात फिर से दोहराने के लिए
0
Jaromanda X 27 सितंबर 2018, 12:15