xiaohuihui
for me

ajax不执行回调函数的原因

2020-04-10 18:48:36
Word count: 959 | Reading time: 3min

ajax不执行回调函数的解决方法

什么是ajax?

Ajax是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。ajax也可理解为浏览器和客户端之间的中间件,在我们每次点击网页中的一个功能或超链接的时候,都会向服务器发送请求,然后再收到服务器响应,才更新页面,这样下去的话,会很耗费服务器资源,在ajax技术的产生之后,我们可以不需要刷新页面的情况下,就可以产生局部刷新的效果。

深入理解:使用 JavaScript 向服务器提出请求并处理响应而不阻塞用户核心对象XMLHttpRequest。通过这个对象,您的 JavaScript 可在不重载页面的情况与 Web 服务器交换数据,即在不需要刷新页面的情况下,就可以产生局部刷新的效果。

ajax的两种请求方式:

  • ajax异步请求:异步请求就当发出请求的同时,浏览器可以继续做任何事,Ajax发送请求并不会影响页面的加载与用户的操作,相当于是在两条线上,各走各的,互不影响。一般默认值为true。异步请求可以完全不影响用户的体验效果,无论请求的时间长或者短,用户都在专心的操作页面的其他内容,并不会有等待的感觉。当我们设置async: true的时候为同步请求,一般默认值为true。
  • ajax同步请求:同步请求即是当前发出请求后,浏览器什么都不能做,必须得等到请求完成返回数据之后,才会执行后续的代码,相当于是排队,也就是说,当JS代码加载到当前ajax的时候会把页面里所有的代码停止加载,页面处于一个假死状态,当这个ajax执行完毕后才会继续运行其他代码页面解除假死状态(即当ajax返回数据后,才执行后面的function)。当我们设置async: false的时候,为同步请求。

ajax不执行回调函数的解决方法:

今天在开发的过程中,突然遇到了个ajax请求的问题,我的ajax接收不了后台返回的数据,success回调函数没执行,也就是ajax不执行回调函数success:function(){},然而后台的数据确正常执行了,尝试了各种方法,把异步请求改为同步请求(async: false),success回调函数能够正常alert弹窗,但是下面的window.location.href不能正常跳转.

前台代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<script>
$(function(){
$('#register').on('click',function(){
$.ajax({
type:'post',
// async: false, //同步请求
url:"{:url('index/User/insert')}",
data:$('#login').serialize(),
dataType:'json',
//接收后台返回过来的数据
success:function(data){
if(data.status == 1){
alert(data.message);
window.location.href="{:url('index/Index/index')}";
}else{
alert(data.message);
window.location.href="{:url('index/User/register')}";
}
}
})
})

})
</script>

后台代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//处理用户提交的注册信息
public function insert(){
if(Request::isAjax()){
//使用模型来创建数据
//获取用户通过表单提交过来的数据
$data = Request::except('password_confirm','post'); //过滤掉password_confirm
if(UserModel::create($data)){
return ['status'=>1,'message'=>'恭喜,注册成功'];
}else{
return ['status'=>0,'message'=>'注册失败,请检查'];
}
}else{
$this->error('请求类型错误','register'); //第一个参数为msg,第二个参数为url
}
}

都是没有问题的,最后寻思之下,是我绑定的点击button按钮不是 type=”button”,而是submit,正确结果是应该改成button即可。

< PreviousPost
C指针
NextPost >
容器和依赖注入
CATALOG
  1. 1. ajax不执行回调函数的解决方法
    1. 1.0.1. 什么是ajax?
    2. 1.0.2. ajax的两种请求方式:
    3. 1.0.3. ajax不执行回调函数的解决方法: