首先,ajax默认是走异步请求的,ajax异步加载数据。 但是在响应成功之后给全局变量赋值,是不成功的。刚遇到,感觉很奇怪。后来百度了,知道ajax异步加载数据,执行顺序的问题。ajax的异步响应是在最后才返回的,所以打印时,还没响应,因此赋值也是失败的。在加载页面时,ajax还未发起请求。
但有时候有些业务必须这么做。
解决:Ajax请求中添加属性 async:false;将ajax请求变为同步请求
或者在全局设置Ajax属性
$.ajaxSetup({
async: false
});
如果说ajax请求成功之后将结果数据想要赋值给一个变量,将要接受赋值的变量必须在ajax请求之前进行全局定义。
代码如下:
1 var results; 2 3 $.ajax({ 4 type: "POST", 5 url: "ajax/checkfor1.php?action=reg_checkEmail", 6 data: {email:email}, 7 dataType: \'text\', 8 async: false, 9 success: function(data){ 10 results=data; 11 return false; 12 }, 13 error: function() { 14 15 alert("异常!"); 16 } 17 }); 18 if(results==0){ 19 ShowTips("用户名已经存在"); 20 return false;}
网络源码:原文链接:https://segmentfault.com/q/1010000000334467
var coordinates = (function() { var result; $.ajax({ type:\'POST\', url:\'/json\', dataType:\'json\', data:{cmd:\'coordinates\'}, async:false, success:function(data){ result = data; } }); return result; })(); $(document).ready(function(){ if(coordinates.length) {//初始化页面,把所有坐标列一个列表 $.each(coordinates, function(index,term) { var $item = $(\'<li class="item"></li>\').text(\'坐标:\'+term[0] + \',\' + term[1]).appendTo(\'#list\'); }) } }