无法在javascript中获取声明的变量值

时间:2017-09-19 10:48:03

标签: javascript

无法将类值取出getJSON范围。在内部声明的警报显示值但外部没有。

// Getting classes based on classID
                        var ClassID = {"ClassID": item.ClassId};
                        var Class="";
                        $.getJSON('@Url.Action("GetClassesByID","Catalogue")', ClassID, function (Val) {
                            Class=Val;
                           alert("Inside Value " +Class);
                        });

html= html+'<div class="col-xs-7 col-sm-7 col-md-7 dvpadding isbnnum"><p><b>CLASS - ('+Class+')</b></p></div>';

我只想从ajax调用

获取的值更新上面html中提到的类

3 个答案:

答案 0 :(得分:3)

.getJSON是异步的。你在它之外调用同步的警报。你需要调用一次函数.getJson是成功的,如:

// Getting classes based on classID
var ClassID = {
  "ClassID": item.ClassId
};
var Class = "";
$.getJSON('@Url.Action("GetClassesByID","Catalogue")', ClassID, logData(val));

function logData(val) {
  Class = Val;
  alert("Outside Value " + Class);
}

答案 1 :(得分:1)

你得到一个空字符串的原因是因为javascript和回调的工作方式。

这是您期望发生的事情:

  1. class =“”
  2. $的getJSON
  3. Class = val
  4. 警报(类)
  5. 这就是发生的事情:

    1. class =“”
    2. $的getJSON
    3. 警报(类)
    4. Class = val
    5. 'Class = val'的原因在于callback,这基本上只是一个应该在$ getJSON完成后发生的动作。

      然而,由于$ getJSON可能需要几秒钟,因此将首先运行$ getJSON以下的任何内容。

      您可以将$ getJSON视为发生的分配。这行代码将非常快速地执行,与任何其他代码行一样快。但是因为你提供了一个回调,所以只有在实际获取JSON时才会执行该行的回调部分,这可能是在任何时候。

答案 2 :(得分:0)

编辑:我完全误读了范围。遗憾。