Значение внутри вызова функции не отражается за пределами функции - PullRequest
0 голосов
/ 09 июля 2020

Переменная цены внутри $ .each печатает 5, но значение Outside печатается как 0. Можете ли вы сказать мне, почему это происходит и как это исправить.

var price=0;
$.getJSON( "http://localhost/temple/price.php?name="+nameofselectedsublist, function( data){

$.each( data, function( key, val ) {

  price=data[key].price;
   console.log(price);
   });
  });


console.log(price+"Outside ");

Ответы [ 2 ]

0 голосов
/ 09 июля 2020

Это проблема синхронизации Syn c vs Asyn c, запустите ее и посмотрите, сколько времени задействовано.

var price = 0;

$.getJSON( "http://localhost/temple/price.php?name="+nameofselectedsublist, function( data){
    console.log('I RECIEVED THE DATA - async')
    $.each( data, function( key, val ) {
        price = data[key].price;
        console.log(price);

    });

});


console.log(price + "Outside ");
console.log("I'm done running my script... sync");

Когда console.log(price + "Outside "); price равно 0; так как вызов $ .get JSON еще не вернул результат ...

Я нашел эту статью , которая может помочь немного разобрать вещи.

0 голосов
/ 09 июля 2020

Поскольку $.getJSON является асинхронным, не имеет значения, завершил ли он выполнение, console.log(price+"Outside ") будет выполняться немедленно.

Переместите его внутрь после завершения $.getJSON.

var price=0;
$.getJSON( "http://localhost/temple/price.php?name="+nameofselectedsublist, function( data){
  $.each( data, function( key, val ) {
      price=data[key].price;
      console.log(price);
  });
  console.log(price+"Outside ");
});

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...