上一篇说了在ajax回调里面处理iframe窗口的刷新问题,这一篇记录一下遇到的一个分别在iframe和div窗口中ajax请求200状态时执行的回调问题。

我们先来看一下ajax请求的写法(这里使用了jQuery)

function check_pass(uid) {
$.ajax({
type: "GET",
url: siteurl,
dataType: "json",
data:{
"c":"api",
"m":"checkpass",
"uid":uid
},
success: function(data) {
console.log("这里是success回调");
console.log(data);
},
error:function (XMLHttpRequest, textStatus, errorThrown) {
console.log("这是error回调");
// 状态码
console.log(XMLHttpRequest.status);
// 错误信息
console.log(errorThrown);
}
});
}

在我们大多数人看来,ajax请求返回"200 ok" 状态码,此时表示请求成功,执行success方法,那我们就做个试验:

首先我们注意看,这个ajax请求规定dataType为json,那么我们在接口里返回不同类型的数据来测试iframe和div的返回结果;

1.接口返回json数据

public function checkpass() {
$uid = $this->input->get('uid');
$data = array('checkcode' => ,
'reason' =>null
);
$this->db->where('uid', $uid);
$this->db->update('mt_member_data', $data);
$msg = array('msg'=>'审核通过','code'=>'1');
echo json_encode($msg);
exit;
}

在iframe窗口执行ajax请求控制台打印(Network显示状态200ok):

这是success回调
{msg: "审核通过", code: ""}

在模态窗口div执行ajax请求控制台打印(Network显示状态200ok):

这是success回调
{msg: "审核通过", code: ""}

结论:当接口返回数据类型为json时(符合ajax设定),iframe和div中的ajax都会走success回调。

2.接口返回null

public function checkpass() {
$uid = $this->input->get('uid');
$data = array('checkcode' => ,
'reason' =>null
);
$this->db->where('uid', $uid);
$this->db->update('mt_member_data', $data);
}

在iframe窗口执行ajax请求控制台打印(Network显示状态200ok):

这是error回调

SyntaxError: Unexpected end of JSON input
at JSON.parse (<anonymous>)
at m.parseJSON (jquery.min.js:)
at Pb (jquery.min.js:)
at x (jquery.min.js:)
at XMLHttpRequest.b (jquery.min.js:)

在模态窗口div执行ajax请求控制台打印(Network显示状态200ok):

这是success回调
null

结论:当接口返回数据类型为null时(不符合ajax设定),iframe中的ajax走error回调,模态窗口div中的ajax却是走success回调。

3.接口返回非json数据

public function checkpass() {
$uid = $this->input->get('uid');
$data = array('checkcode' => ,
'reason' =>null
);
$this->db->where('uid', $uid);
$this->db->update('mt_member_data', $data);
echo "非json数据";
exit;
}

在iframe窗口执行ajax请求控制台打印(Network显示状态200ok):

这是error回调

SyntaxError: Unexpected token 非 in JSON at position 0
at JSON.parse (<anonymous>)
at m.parseJSON (jquery.min.js:)
at Pb (jquery.min.js:)
at x (jquery.min.js:)
at XMLHttpRequest.b (jquery.min.js:)

在模态窗口div执行ajax请求控制台打印(Network显示状态200ok):

这是error回调

SyntaxError: Unexpected token 非 in JSON at position 0
at JSON.parse (<anonymous>)
at parseJSON (VM1506 jquery.min.js:)
at On (VM1506 jquery.min.js:)
at T (VM1506 jquery.min.js:)
at XMLHttpRequest.r (VM1506 jquery.min.js:)

结论:当接口返回数据类型为非json数据时(不符合ajax设定),iframe和模态窗口div中的ajax都是走error回调,并且报数据格式不对的错误。

所以,我们可以看出,当接口不返回数据(即为null)时,对于iframe和div中发起的ajax请求,请求成功后执行的回调函数是不同的,这点值得注意。



关于iframe和div窗口中ajax请求200状态时执行的回调问题的更多相关文章

  1. ajax请求成功但不执行success-function回调函数的问题

    在success:function(data){}下面加个error:function(){},看看是不是出错了走了error.如果是,说明返回值类型不符合要求. 比如:下面代码返回String类型. ...

  2. ajax请求为异步操作时,返回的数据不会被并列函数执行

    ajax请求为异步操作时,返回的数据不会被并列函数执行

  3. Ajax请求Spring Mvc 时总是返回 302 Moved Temporarily

    功能上主要是实现在前台点击保存按钮,单元格变成文本框,修改值后请求后台保存数据.但在做的过程中,ajax 请求总是不能请求到后.打开浏览器调试,查看到http状态码总是返回 http/1.1  302 ...

  4. jq使用ajax请求,返回状态 canceled错误

    在使用jq,ajax请求时出现该错误 原因:button按钮类型为type=submit ,script中又自定用botton按钮点击提交ajax,造成冲突. 解决方法:button按钮类型改为 ty ...

  5. 关于心跳ajax请求pending状态(被挂起),stalled时间过长的问题。涉及tcp连接异常。

    环境:景安快云服务器(听说很垃圾,但是公司买的,我也刚来),CentOS-6.8-x86_64,Apache,MySQL5.1,PHP5.3. 问题:现公司有一个php系统,需要重复向后台发送ajax ...

  6. ajax跨域POST时执行OPTIONS请求服务端返回403forbidden的解决方法

    ajax访问服务端restful api时,由于contentType类型的原因,浏览器会先发送OPTIONS请求. 本人服务端用的是spring mvc框架,web服务器用的是tomcat的,以下给 ...

  7. 使用ajax请求后端程序时,关于目标程序路径问题

    这里涉及到和PHP中类似的问题,有待更新!!!

  8. HTTP协议、Ajax请求

    今天这篇文章呢,主要讲的就是关于HTTP协议.Ajax请求以及一些相关的小知识点.虽然内容不算多,可是是很重点的东西~ HTTP协议 1. http:超文本传输协议.简单.快速.灵活.无状态.无连接. ...

  9. Jquery监听AJAX请求

    .ajaxComplete() 当Ajax请求完成后注册一个回调函数.这是一个 AjaxEvent. .ajaxError() Ajax请求出错时注册一个回调处理函数,这是一个 Ajax Event. ...

随机推荐

  1. Python基础学习之 函数

    阅读目录 第一篇:  函数初识 第二篇:  函数命名空间 作用域 闭包 第三篇:  装饰器 第四篇:  装饰器 面试题错误点 第五篇:  迭代器生成器 第六篇:  生成器进阶 第七篇:  递归 第八篇 ...

  2. 62二叉搜索树的第k个结点

    题目描述 给定一颗二叉搜索树,请找出其中的第k大的结点.例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4. 思路 二叉搜索树的中序遍历的输出结果是拍好序 ...

  3. POJ - 2762 Going from u to v or from v to u? (强连通缩点+判断单向连通)

    题意:判断一个有向图中的任意两点u.v,是否可以由其中一个点到达另一个点. 分析:这个问题转化以后就是:将该图强连通缩点后再判断其是否是单向连通的.缩点用Tarjan处理强连通分量. 有一个定理是这样 ...

  4. DataNode启动不成功——java.net.BindException: Port in use: localhost:0 Caused by: java.net.BindException: Cannot assign requested address解决办法

    爱折腾的人总是会出线各种奇怪的问题.记得之前听一位大师讲过,我们不能踩完前进路上的所有坑前进,而应该学会怎样避开前进路上的坑,踩得坑越多,可能你的经验越丰富,但是付出的时间代价可能不是经验能换来的.我 ...

  5. 设计模式(六) xml方式实现AOP

    1.1. Aop,  aspect object programming  面向切面编程 功能: 让关注点代码与业务代码分离! 关注点, 重复代码就叫做关注点: 切面, 关注点形成的类,就叫切面(类) ...

  6. 完美修改iOS项目名

    注意:重命名项目时,记得先备份好一份 1.选中旧项目名,改为新项目名: 选择rename: 2.修改相关文件夹名称: 3.全局搜索旧项目名称,然后替换为新项目名称: 4.经过步骤3的替换,再次全局搜索 ...

  7. wyx20162314实验报告二

    北京电子科技学院BESTI实验报告 课程:程序设计与数据结构 班级: 1623 姓名: 王译潇 学号:20162310 指导教师:娄佳鹏老师.王志强老师 实验日期:2017年3月26号 实验密级: 非 ...

  8. AppLocker Pro FAQ

    How to use AppLocker Pro: 1. Start AppLocker Pro, create a password.2. In the main console, click &q ...

  9. HDU 1176 免费馅饼 简单动态规划

    世道很简单的动态规划,但是却错了,让我很无语,改来改去还是不对,第二天有写就对了,之后我就耐着性子慢慢比较之前的错误代码,发现 第一次错:纯粹用了a[i][j]+=max3(a[i+1][j-1], ...

  10. Spring Boot 中全局异常处理器

    Spring Boot 中全局异常处理器,就是把错误异常统一处理的方法.等价于Springmvc中的异常处理器. 步骤一:基于前面的springBoot入门小demo修改 步骤二:修改HelloCon ...