【问题标题】:jQuery getting jSon data but not returning/assigning valuejQuery获取json数据但不返回/赋值
【发布时间】:2013-12-05 11:35:36
【问题描述】:

我正在使用 jQuery 调用控制器,控制器正在返回一个值。 jQuery 正在获取该值,但它没有将其设置为我的变量并返回它。我在这里做错了什么?

GetDepartmentID 被调用,值为 1。它到达控制器,控制器返回为 1 的部门 ID。

console.log("Inside-DepartmentID " + data) 在控制台中显示为 1,所以我知道数据是从控制器返回的。

然后我将数据分配给部门 ID。把它返还。然后我的外部函数尝试 console.log 返回并且它是未定义的。没看懂。

.change 函数调用 GetdepartmentID(1);

function GetDepartmentID(functionID) {
    var departmentID;
    jQuery.getJSON("/MasterList/GetDepartmentID/" + functionID, null, function (data) {
        console.log("Inside-DepartmentID " + data)
        departmentID = data;
    });
    return departmentID;
}

jQuery('#functionID').change(function () {
        var functionID = jQuery(this);
        //console.log(functionID.val());
        var value = GetDepartmentID(functionID.val());
        console.log("test " + value);
        //GetOwnerList(value);
    });

【问题讨论】:

  • 觉得这样评论更好:AJAX 是异步的,当您点击console.log 语句时,您的请求仍在处理中,因此返回undefined
  • @tymeJV 这是否意味着我想要做的事情是不可能的?我需要做的就是向我的控制器传递一个 int,它返回一个 int,然后我将该 int 用于另一个 AJAX 调用。
  • @JamesWilson 一个不太好的方法是让你的 Ajax 调用 async:false 从 $.getJSON 切换到传统的 ajax 调用...
  • @James Wilson -- 当然有可能,看 PSL 的回答,你需要一个回调函数。
  • @tereško 你需要对全局编辑标签更加小心,这个问题与 asp.net mvc 完全无关,我也看不到任何答案或 cmets 中的任何暗示。跨度>

标签: javascript jquery ajax asp.net-mvc


【解决方案1】:

您可以尝试这种方式来处理从 AJAX 调用返回的数据。

function processResults(departmentID)
{
   console.log("test " + departmentID);
   GetOwnerList(departmentID);
   // Someother code.
}

function GetDepartmentID(functionID, callBack) {

    jQuery.getJSON("/MasterList/GetDepartmentID/" + functionID, null, function (data) {
        console.log("Inside-DepartmentID " + data)
        callBack(data); //Invoke the callBackhandler with the data
    });

}

jQuery(function(){
jQuery('#functionID').change(function () {
        var functionID = jQuery(this);
        //console.log(functionID.val());
        GetDepartmentID(functionID.val(), processResults); // pass function as reference to be called back on ajax success.
    });
 });

或者只是这样做:这与将所有后续处理代码放在 getJSON 处理程序中一样好。

   function processResults(data)
    {
       //handle the data here.
    }

  function GetDepartmentID(functionID) {
    jQuery.getJSON("/MasterList/GetDepartmentID/" + functionID, null, processResults);
  }



jQuery(function(){
    jQuery('#functionID').change(function () {
            var functionID = jQuery(this);
            //console.log(functionID.val());
            GetDepartmentID(functionID.val()); // pass function as reference to be called back on ajax success.
        });
     });

【讨论】:

  • 谢谢 PSL 是一种比另一种更好的方法,还是只是偏好?
  • 如果您特别想在将数据传递给函数(可能是通用的并在其他地方使用)之前处理数据,请使用第一个。否则你可以用第二种方法......
  • 是的,不得不等待 7 分钟。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多