Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript “未定义”用于警告ajax调用响应,为什么?_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript “未定义”用于警告ajax调用响应,为什么?

Javascript “未定义”用于警告ajax调用响应,为什么?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我试图提醒ajax请求捕获的返回值。它引用的web方法返回一个布尔值true或false,当我试图在ajax方法之外访问它时,它会给出一条未定义的消息: <script type="text/javascript" language="javascript"> $(document).ready(function () { var authInfo; $.ajax({ type:

我试图提醒ajax请求捕获的返回值。它引用的web方法返回一个布尔值true或false,当我试图在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>
为什么alertauthInfo给我的信息是未定义的??请帮忙

这段代码在上面的上下文中适用于哪里

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

                   });


                   };
$.ajax调用是异步的,因此在服务器返回响应之前,结果不可用

如果您将警报放在成功回调中,那么如果HTTP事务工作,警报应该会工作。

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

如果将警报放在成功回调中,则如果HTTP事务正常工作,警报应该会正常工作。

出现:

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,
});
看来:

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

通过ajax调用获得的请求和响应是异步的。我认为不可能在ready函数结束时提醒您在响应中得到的值,因为您不能保证在函数完成执行之前会得到响应。

通过ajax调用得到的请求和响应是异步的。我认为不可能在ready函数结束时警告您在响应中得到的值,因为您不能保证在函数完成执行之前会得到响应。

您在实际ajax调用返回之前警告authInfo变量。如果您尝试以下方法:

success:function(msg) {
   authInfo = msg.d;
   alert(authInfo);
}
我认为您将得到正确的结果。

您在实际的ajax调用返回之前警告了authInfo变量。如果您尝试以下方法:

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

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

编辑以处理新代码:

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

编辑以处理新代码:

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

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

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

我认为您在服务器端有一个错误,请通过FF上的firebug或chrome上的开发者工具检查响应,这可能也是因为json无效,无论如何,您需要检查服务器输出我认为您在服务器端有错误,通过FF上的firebug或chrome上的developer tools检查响应,也可能是因为json无效,无论如何,您需要检查哪些服务器输出如何将条件逻辑放在那里/你可以将你的全部逻辑放在成功块中。。或者,您可以调用一个传递要使用的变量的函数,并将逻辑移到该变量function@ShaneAdrianMuaz是的,就像Ajai说的,您可以将所有逻辑直接放在成功处理程序中,或者将对函数的调用放在成功处理程序中,然后将逻辑放在该函数中。关键是,在浏览器调用成功处理程序以响应完成的请求之前,它还没有完成。无法告诉浏览器等待异步请求完成。@shanedarianmuaz我在回答中包含了一些示例代码,说明了Pointy在说什么。底线是,波蒂的答案是正确的,而且解释得最好。那么我该如何把条件逻辑放在那里呢/你可以将你的全部逻辑放在成功块中。。或者,您可以调用一个传递要使用的变量的函数,并将逻辑移到该变量function@ShaneAdrianMuaz是的,就像Ajai说的,您可以将所有逻辑直接放在成功处理程序中,或者将对函数的调用放在成功处理程序中,然后将逻辑放在该函数中。关键是,在浏览器调用成功处理程序以响应完成的请求之前,它还没有完成。无法告诉浏览器等待异步请求完成。@shanedarianmuaz我在回答中包含了一些示例代码,说明了Pointy在说什么。博托
m line is Pointy的答案是正确的,解释得最好。我需要获得authInfo来做一些条件逻辑!您需要在success:function中计算authInfo,或者从那里调用另一个函数。您需要传入参数,对吗?在方法调用中,u没有放置参数success:key只是引用函数对象。无论最终调用它的是什么,都将传入任何参数。是的,如果您有success:onSuccessmsg,那么您实际上将调用该函数并将success:设置为该函数返回的任何参数!我需要获得authInfo来做一些条件逻辑!您需要在success:function中计算authInfo,或者从那里调用另一个函数。您需要传入参数,对吗?在方法调用中,u没有放置参数success:key只是引用函数对象。无论最终调用它的是什么,都将传入任何参数。是的,如果您有success:onSuccessmsg,那么您实际上将调用该函数并将success:设置为该函数返回的任何参数!我编辑了这个问题,你能检查一下并告诉我最后一段代码块shud在哪里吗?@Shane将它放在alertmsg.d的位置,用msg替换authInfo。d@ShaneAdrianMuaz-Kevin B.是对的,但我也建议您将第二段代码作为函数本身编写,在AJAX调用的成功部分传递调用,并将msg.d传递给它。。。这使AJAX调用保持干净,并且处理程序方法易于在其他地方维护。回答你的问题吗?我编辑了这个问题,你能检查一下并告诉我最后一段代码块shud的位置吗?@Shane将它放在alertmsg.d的位置,用msg替换authInfo。d@ShaneAdrianMuaz-Kevin B.是对的,但我也建议您将第二段代码作为函数本身编写,在AJAX调用的成功部分传递调用,并将msg.d传递给它。。。这使AJAX调用保持干净,并且处理程序方法易于在其他地方维护。那能回答你的问题吗?