GetJSON kodining qolgan qismini ishlatishdan oldin qanday kutish mumkin?

Sizning shahar joylashuvingiz aniqlangan oddiy funktsiyani yozdim. Biroq, funktsiyani getJSONni kutish va keyin kodning keyingi satriga o'tish uchun majburlash uchun usul bormi deb o'ylayman? Masalan, "Alert 1" ni "Alert 2" atlayotganini ko'rasiz va to'g'ridan-to'g'ri "Alert 3" ga o'tib, "Alert 2" ni ko'rsatadi. Oldindan rahmat.

Yaxshi tilaklar, Jorj

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

var Alpha;

function Location(){
        alert(Alpha + " 1");
        $.getJSON("http://freegeoip.net/json/?callback=?", function(location){
                Alpha = location.city;
                alert(Alpha + " 2");
        });     
        alert(Alpha + " 3");
}

$(document).ready(function() {
        Location();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</div> </div>
1
Nimaga bu kodni qayta chaqiruvga ko'chirmaysiz?
qo'shib qo'ydi muallif Milney, manba
Siz va'dalar yoki qayta qo'ng'iroqlar bilan ishlashingiz mumkin. getJSON sizning kodingizga asynkron.
qo'shib qo'ydi muallif DomeTune, manba

7 javoblar

Kodingizda getJSON natijalarni asynxron tarzda qaytaradi. Buning ma'nosi kod bajarilishi bajarilganda kodning ishlashini davom ettiradi.

Natijalar qaytarilmasdan oldin hech narsa ishlamayotganligini tekshirish uchun kodni muvaffaqiyatli qayta chaqiruvga ko'chirishingiz mumkin:

var Alpha;

function Location(){
    alert(Alpha + " 1");
    $.getJSON("http://freegeoip.net/json/?callback=?", function(location){
        Alpha = location.city;
        whenDone();
    }); 
}

function whenDone() {
    alert(Alpha + " 2");
    alert(Alpha + " 3");
}

$(document).ready(function() {
    Location();
});

Yangi JavaScript-versiyalarda siz async/kutish kuchini ishlatishingiz va ijro uchun biron-bir tarzda kutishingiz mumkin:

let Alpha;

function Location() {
  return new Promise((resolve, reject) => {
    $.getJSON("http://freegeoip.net/json/?callback=?", location => {
      resolve(location);
    }); 
  }
}

async function init() {
  try {
    let location = await Location();
    Alpha = location.city;
  } catch(error) {
    console.error(error);
  }
}

$(document).ready(function() {
  init();
});

Bu sizning ba'zi xususiyatlaringizni to'ldirishingizni talab qiladi.

Eslatma: jQuery yangi versiyalari kutish uchun foydalanishingiz mumkin bo'lgan va'daga mos keladigan interfeysni qaytaradi. Men buni sinab ko'rmadim, lekin da'vatga qo'ng'iroqni eski versiyalarda ishlashni davom ettiraman.

3
qo'shib qo'ydi

$ .GetJson tugagandan so'ng bajariladigan kodni tanlashingiz mumkin. Bu erda jQuery hujjatidan namuna.

var jqxhr = $.getJSON( "example.json", function() {
  console.log( "success" );
  })
  .done(function() {
    console.log( "second success" );
  })
  .fail(function() {
    console.log( "error" );
  })
  .always(function() {
    console.log( "complete" );
  });

jQuery Docs

3
qo'shib qo'ydi

Callback funksiyasidagi getJSON() chaqiruvidan so'ng amalga oshirishingiz kerak bo'lgan mantiqni qo'ying, bu kabi funktsiya niyatini quyidagicha ifodalaydi:

var Alpha;
function ineedtorunmorecode(){
    alert(Alpha + " 4");
}

function Location(){
    alert(Alpha + " 1");
    $.getJSON("http://freegeoip.net/json/?callback=?", function(location){
        Alpha = location.city;
        alert(Alpha + " 2");
        alert(Alpha + " 3");
        ineedtorunmorecode();
    }); 
}

$(document).ready(function() {
    Location();
});
2
qo'shib qo'ydi

getJSON deb nomlangan vazifani bajarish mumkin emas. Buni amalga oshirish JavaScript-ni mos kelmaydigan voqealar uchun JavaScript-ni ishlatadi. Qo'ng'iroqni tugatgandan so'ng bajarilishi kerak bo'lgan har qanday kod chaqiriqlardan birida bo'lishi kerak (yoki chaqiriladi). (Yoki siz so'zlovchi API-dan foydalanishingiz mumkin, bu hammasi kaput ostida, lekin yaxshi sintaksisdan iborat ...)

1
qo'shib qo'ydi

Funktsiyani asenkron sifatida kutishmaydi, lekin siz shunday kodni shunday usulda bajarishingiz mumkin:

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

var Alpha;

function Location(){
        alert(Alpha + " 1");

   var onSuccess = function(location) {
                Alpha = location.city;
                             alert(Alpha + " 2");
    }
        $.getJSON("http://freegeoip.net/json/?callback=?", onSuccess);  
  
        
}

$(document).ready(function() {
        Location();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</div> </div>
1
qo'shib qo'ydi

hujjatlar bo'limidagi misollarda eslab o'tilgan kodni $ .getJSON - bu bajarilgan . Bu erda siz misolni ko'rishingiz mumkin. Kodni qanday bajarilayotganini ko'rsatish uchun console.log ni qo'shdim.

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

(function() {
  console.log("Start Snippet");
  var flickerAPI = "http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?";
  console.log("Start Load");
  $.getJSON( flickerAPI, {
    tags: "mount rainier",
    tagmode: "any",
    format: "json"
  })
    .done(function( data ) {
      console.log("End Load");
      $.each( data.items, function( i, item ) {
        $( "" ).attr( "src", item.media.m ).appendTo( "#images" );
        if ( i === 3 ) {
          return false;
        }
      });
    });
  console.log("End Snippet");
})();
img {
  height: 100px;
  float: left;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="images"></div>
</div> </div>
1
qo'shib qo'ydi

Afsuski, javascriptda kutishning oddiy usuli yo'q. Qayta qo'ng'iroq vazifalarini ishlatishingiz kerak.

1
qo'shib qo'ydi
Javascript UZB
Javascript UZB
99 ishtirokchilar

@js_uzb @vuejs_uz @react_uz @nodejs_uz @angular_uz @ngTashkent @yiiframework_uz @laravel_uz @linux_uzbek @python_uz @swift_uzb —————— @uzdevgroup @UzGeeksGroup ——— @UzDev_Jobs @jobs_uzb