jquery ajax 在回调函数内 给变量赋值,为什么返回不出去?那要怎么处理

JavaScript016

jquery ajax 在回调函数内 给变量赋值,为什么返回不出去?那要怎么处理,第1张

在jquery里异步请求时后面的代码不会等你的请求返回数据后再执行,也就是说alert(retVal)执行时你的ajax可能还没返回数据,也就是说你的全局变量retVal没有被重新赋值,也就是还是以前的那个-1,我以前也是这个问题 ajax为异步请求,顾名思义它的请求时跟你的js同时执行的,所以要对ajax返回结果进行相应的操作都是写在它的回调函数里,即: success:function(data){...}里面,这样说你可能不太明白,举个例子

var re = 0

function test(){

alert(re)//num1

re = testAjax()

alert(re)//num3

}

function testAjac(){

$.ajax({

type:"post",

url:"",

dataType:"json",

success:function(data){

re = 1

alert(re)//num2

}

})

}

上面执行alert的顺序肯定是num1,num3,num2,并且alert出来的值是0,0,1;

当然如果你的请求足够快(几乎不可能),快到比本页面还快,那么顺序就会是num1,num2,num3了

里面的return,返回的只是里面的匿名函数,

即返回值作为local.setSearch...callback()这个函数的参数执行

而不是返回给最外面的searchBystationName()这个函数

实际上searchBystationName这个函数并没有返回值。。

补充:当coordinate=searchBystationName(keyword)即给coordinate赋值的时候,searchBystationName(keyword)执行完就销毁了,所以coordinate最后得到的应该是一个空值(猜测)

alert()的时候就为null或者“”或者undefined。。

不知道理解我的意思了没

你是说返回键不会回到跳转之前的那个页面?

这个非常的简单!

不知道你的js基础怎么样? 在我们的js的dom编程基础知识里面我们已经指定浏览器对象的6大属性。 其中就有location对象和history这连个对象 。分别介绍两个对象

location:存储了大量的关于当前页面的地址信息。还有连接到web服务器的端口等(这个不是重点)

history这个对象存储了浏览器浏览过得历史页面(它里面有个历史栈)。

location有个方法叫 replace(url) 这个方法可以替换history对象里面里面的历史栈当前页面

换成新的(也就意味着跳转后 注意哦这个跳转是意味着我们跳转之前最起码是在一个页面的基础之上才可以跳转到另一个页面的),这也意味着“后退”或者“前进”都无法在回到跳转之前的页面了。因为在历史栈帧它(跳转之前的页面)已经被替换了。这个替换就是通过location的replace方法实现的。

下面贴出代码!

<!doctype html>

<html lang="en">

 <head>

  <meta charset="UTF-8">

  <meta name="Generator" content="EditPlus®">

  <meta name="Author" content="">

  <meta name="Keywords" content="">

  <meta name="Description" content="">

  <title>Document</title>

  <script type="text/javaScript">

function f() {

alert(history.length)

location.replace('http://www.baidu.com')

alert(history.length)

}

  </script>

 </head>

 <body>

这个是一个页面

<button type="button" onclick="f()">点击我跳转新的页面</button>

 </body>

</html>

我不确定这个是不是你要的! 知识利用了replace这个方法将历史栈中的页面替换了。我理解你的提出的问题“回不到上一页” 我就当是那个页面再也找不到了。