如何在使用ajax获取和分配jquery中的数据时控制代码执行顺序?

时间:2011-01-05 13:28:26

标签: jquery ajax

这些是我的代码的一部分:

我的问题是 userName assign expression 在函数 getUserInfomation(userId)之前执行,甚至认为我把 getUserInfomation()放入在他们面前。

全局变量:

userInformation = {};

函数调用事件来赋值:

function assignValues(){
   getUserInfomation(userId);

       userName =  userInformation['user_name'];  // undefined
       userNickName= userInformation['user_nickname'];// undefined

}

通过AJAX从数据库获取数据的功能:

function getUserInfomation (userId){


            $.ajax({
              url: 'include/user.login.process.php',
              data:({userId: userId }),
              success: function(data) {

                if(data){
                    JSON.parse(data, function (key, value) {
                        userInformation[key] = value;
                        console.log(key +' value is '+obj.userInformation[key]);
                    });
                }
             }
           });

        }
非常感谢你!

2 个答案:

答案 0 :(得分:1)

您需要在.ajax调用

的成功函数内执行赋值操作

$ .ajax是一个异步操作,因此当你调用它时,它会立即返回执行代码的下一行(在本例中为userName = ....),但是你还没有从中获取数据服务器,这就是成功回调的目的。

答案 1 :(得分:1)

$ .ajax方法是异步的。 您必须更改为将ajax请求后必须执行的所有代码放入回调函数: 所以,你必须使用这样的代码:

function getUserInfomation (userId){
        $.ajax({
          url: 'include/user.login.process.php',
          data:({userId: userId }),
          success: function(data) {

            if(data){
                JSON.parse(data, function (key, value) {
                    userInformation[key] = value;
                    console.log(key +' value is '+obj.userInformation[key]);

                    assignValues();
                });
            }
         }
       });

    }

此外,您可以同步调用ajax函数。但这是一种不好的做法,因为你将失去ajax的优势。

        $.ajax({
          url: 'include/user.login.process.php',
          data:({userId: userId }),
          async:false,
          success: function(data) {
          ...