我想覆盖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;
}
答案 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)
默认情况下,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);
}