“undefined”用于警告ajax呼叫响应,为什么?

时间:2011-12-12 18:48:06

标签: javascript jquery ajax

我正在尝试警告ajax请求捕获的返回值。它引用的Web方法返回一个布尔值true或false,当我试图在ajax方法之外访问它时,它会给出一条消息“undefined”:?

       <script type="text/javascript" language="javascript">

       $(document).ready(function () {
           var authInfo;

           $.ajax({
               type: "POST",
               url: "service.asmx/getAuthInfo",
               data: "{}",
               contentType: "application/json; charset=utf-8",
               dataType: "json",
               success: function (msg) {
                   authInfo = msg.d;

               },


           });

           alert(authInfo);          

       });

    </script>

为什么警报(authInfo)给我“未定义”?请帮忙!

这段代码在上述背景下适合哪里?

if(auhthInfo){

                        $(".ansitem").editable('FetchUpdate.aspx', {

                    style: 'background-color:inherit;',
                    type: 'textarea', 
                    indicator: '<img src="spinner.gif">',
                    event: 'dblclick',
                    onblur: 'submit', 
                    submitdata: function (value, settings) { 
                        return { orgval: value};
                        },

                   });


                   };

6 个答案:

答案 0 :(得分:3)

您的“$ .ajax()”调用是异步,因此在从服务器返回响应之前,结果不可用。

如果你将“alert()”置于“成功”回调中,它应该有效(如果HTTP事务有效)。

答案 1 :(得分:2)

编辑处理你的新代码:

<script type="text/javascript" language="javascript">
   $(document).ready(function () {
       var authInfo;
       $.ajax({
           type: "POST",
           url: "service.asmx/getAuthInfo",
           data: "{}",
           contentType: "application/json; charset=utf-8",
           dataType: "json",
           success: function (msg) {
               // alert(msg.d); // here it will work as it is only called when it succeeds.
               MyHanlder(msg);
           },
       });
       // alert(authInfo); // here authinfo has no value as the AJAX call may not have returned.
   });

   function MyHandler(msg) {
      if(msg.d){
           $(".ansitem").editable('FetchUpdate.aspx', {
               style: 'background-color:inherit;',
               type: 'textarea', 
               indicator: '<img src="spinner.gif">',
               event: 'dblclick',
               onblur: 'submit', 
               submitdata: function (value, settings) { return { orgval: value}; },
            });
       };
    }
</script>

答案 2 :(得分:1)

看来:

alert(authInfo);

文档准备好后立即运行。

但是,在AJAX调用完成之前,该变量尚未初始化。

尝试将警报移至:

$.ajax({
   type: "POST",
   url: "service.asmx/getAuthInfo",
   data: "{}",
   contentType: "application/json; charset=utf-8",
   dataType: "json",
   success: function (msg) {
       authInfo = msg.d;
       alert(authInfo);
   },
});

如果您需要对值进行更复杂的操作,可以尝试将代码重新分解为另一个函数:

function onSuccess(msg)
{
   if(msg.d)
   {
      window.alert('The value is true!');
   }
   else
   {
      window.alert('The value is false!')
   }
}

$.ajax({
   type: "POST",
   url: "service.asmx/getAuthInfo",
   data: "{}",
   contentType: "application/json; charset=utf-8",
   dataType: "json",
   success: onSuccess,
});

答案 3 :(得分:1)

通过ajax调用获得的请求和响应是asynchronous。我认为不可能在准备好的函数结束时提醒你得到的值,因为你不确定在函数完成执行之前你会得到你的响应。

答案 4 :(得分:1)

在实际的ajax调用返回之前,您正在警告authInfo变量。如果你试试这个:

success:function(msg) {
   authInfo = msg.d;
   alert(authInfo);
}

我认为你会得到正确的结果。

答案 5 :(得分:1)

由于AJAX调用是异步完成的,因此警报在执行时没有值。如果将警报放在成功函数中,您应该看到相应的结果。我还注意到在success函数参数之后$ .ajax参数中有一个额外的逗号。