2011-12-12 85 views
1

我想提醒ajax请求捕获的返回值。它引用的web方法是返回true或false的布尔值,当我试图在ajax方法之外访问它时,它会给出一条消息“undefined”:?“未定义”提醒ajax呼叫响应,为什么?

 <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> 

为什么alert(authInfo)给我为“undefined”?请帮忙 !

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

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}; 
         }, 

        }); 


        }; 
+0

我认为你在服务器端有错误,通过FF上的萤火虫或Chrome上的开发者工具检查响应,可能是因为无效的json也是,无论如何你需要检查什么服务器输出 – haynar

回答

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> 
+0

我编辑了这个问题,你可以检查一下,告诉我最后一块代码块在哪里适合? –

+1

@Shane把它放在'alert(msg.d)'的位置,用'msg.d'替换'authInfo' –

+0

非常感谢,现在一切都好! –

3

你的“$阿贾克斯()”呼叫异步,直到响应从服务器返回因此结果是不可用的。

如果您将“alert()”放入“成功”回调中,它应该可以工作(如果HTTP事务有效)。

+0

那么我该如何把条件那里的逻辑? :/ –

+1

您可以将整个逻辑放入成功块内或者你可以调用一个函数传递你想要使用的变量,并将你的逻辑移动到该函数 – Ajai

+2

@ShaneAdrianMuaz是的,就像Ajai说你会把所有的逻辑直接放在“成功”处理程序中,或者打个电话给功能,然后把逻辑放在那个函数中。重点在于,在浏览器调用“成功”处理程序来响应请求完成之前,它尚未完成。没有办法告诉浏览器“等待”异步请求完成。 – Pointy

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, 
}); 
+0

我需要获得authInfo来完成一些条件逻辑! –

+1

您需要在您的'success:'函数中评估'authInfo',或从那里调用另一个函数。 –

+0

已更新回答.. –

1

请求并且您通过ajax调用得到的响应是asynchronous。我认为不可能在就绪函数结束时提醒您获得响应的值,因为您不确定在函数完成执行前您将获得您的响应。

1

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

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

我想你会得到正确的结果。

1

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