从ajax调用覆盖javascript变量

时间:2014-03-02 15:25:55

标签: javascript jquery ajax

我想覆盖ajax调用中的status变量..我试过这种方式,但它没有覆盖status变量......请帮助我。

 function myfunction()
            {
                var status = "";
                $.ajax({
                    type: 'POST',
                    url: "<?php echo base_url() ?>login/ajaxsessioncheck/",
                    success: function(data)
                    { 
                            status="new value"; 

                    }
                });
                alert(status)
            return status;
            }

3 个答案:

答案 0 :(得分:2)

可能的解决方案可能是,

function ajaxsessioncheck(myCallback)
            {
                var status = "";
                $.ajax({
                    type: 'POST',
                    url: "<?php echo base_url() ?>login/ajaxsessioncheck/",
                    success: function(data)
                    { 
                            //status="new value"; 
                        myCallback(data);

                    }
                });
//                alert(status)
//            return status;
            }

所以你可能想做的是,

if(ajaxsessioncheck()){
//then session still exists
}

但实际上你应该做点什么,

ajaxsessioncheck(function(data){

  status = "new value";
  alert(status);
//go to next page 
//or do next action that is only allowed if session still exists

});

Arun P Johny评论中提到的帖子How do I return the response from an asynchronous call?提供了如何解决这个特定问题以及与ajax请求的同步和异步行为相关的问题的详尽解释。

答案 1 :(得分:1)

您对AJAX调用的工作方式缺乏基本的了解。 AJAX调用是异步的。您的代码在处理呼叫时继续执行。成功回调中的代码只会在当前执行代码完成后(当javascript将控制权放回浏览器时)和AJAX请求完成时执行。如果您在status =“new value”之后发出警报,您将看到它获得正确的值。

答案 2 :(得分:-1)

FIDDLE

默认情况下,ajax调用是Async,因此当您return status时,可能未设置status的新值。要么使ajax调用同步,要么在外部作用域中定义status变量,然后将其设置在成功回调中。

var status = "";
alert(status);    
function ajaxsessioncheck(){ 
    $.ajax({
         type: 'POST',
         url: "<?php echo base_url() ?>login/ajaxsessioncheck/",
         success: function(data){ 
              status="new value"; 
              alert(status);
              // write code for additional functionality that needs to be executed after the new value has been set for status here.. of just make a call to another function that handles further operations..
              doSomethingWithNewStatus();
         }
   });
}

ajaxsessioncheck();


function doSomethingWithNewStatus() {
 alert("Here is your new status " + status);
}