关于iframe和div窗口中ajax请求200状态时执行的回调问题
上一篇说了在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状态时执行的回调问题的更多相关文章
- ajax请求成功但不执行success-function回调函数的问题
在success:function(data){}下面加个error:function(){},看看是不是出错了走了error.如果是,说明返回值类型不符合要求. 比如:下面代码返回String类型. ...
- ajax请求为异步操作时,返回的数据不会被并列函数执行
ajax请求为异步操作时,返回的数据不会被并列函数执行
- Ajax请求Spring Mvc 时总是返回 302 Moved Temporarily
功能上主要是实现在前台点击保存按钮,单元格变成文本框,修改值后请求后台保存数据.但在做的过程中,ajax 请求总是不能请求到后.打开浏览器调试,查看到http状态码总是返回 http/1.1 302 ...
- jq使用ajax请求,返回状态 canceled错误
在使用jq,ajax请求时出现该错误 原因:button按钮类型为type=submit ,script中又自定用botton按钮点击提交ajax,造成冲突. 解决方法:button按钮类型改为 ty ...
- 关于心跳ajax请求pending状态(被挂起),stalled时间过长的问题。涉及tcp连接异常。
环境:景安快云服务器(听说很垃圾,但是公司买的,我也刚来),CentOS-6.8-x86_64,Apache,MySQL5.1,PHP5.3. 问题:现公司有一个php系统,需要重复向后台发送ajax ...
- ajax跨域POST时执行OPTIONS请求服务端返回403forbidden的解决方法
ajax访问服务端restful api时,由于contentType类型的原因,浏览器会先发送OPTIONS请求. 本人服务端用的是spring mvc框架,web服务器用的是tomcat的,以下给 ...
- 使用ajax请求后端程序时,关于目标程序路径问题
这里涉及到和PHP中类似的问题,有待更新!!!
- HTTP协议、Ajax请求
今天这篇文章呢,主要讲的就是关于HTTP协议.Ajax请求以及一些相关的小知识点.虽然内容不算多,可是是很重点的东西~ HTTP协议 1. http:超文本传输协议.简单.快速.灵活.无状态.无连接. ...
- Jquery监听AJAX请求
.ajaxComplete() 当Ajax请求完成后注册一个回调函数.这是一个 AjaxEvent. .ajaxError() Ajax请求出错时注册一个回调处理函数,这是一个 Ajax Event. ...
随机推荐
- Python 网络编程了解
阅读目录 一: 网络编程socket http://www.cnblogs.com/zhoujunhao/articles/7592671.html 二: TCP粘包处理 http://www.cnb ...
- responseEntity 实现文件下载
@RequestMapping("/testResponseEntity") public ResponseEntity<byte[]> testResponseEnt ...
- 对Servlet请求或响应进行JMockit测试
对Servlet请求及响应进行mock方法, 通过getMockInstance方法对servlet进行打桩,对servlet提供的方法进行mock,替代真正的servlet请求或响应. 参考链接: ...
- ES6 Promise 让异步函数顺序执行
应用 ES6 的 内置对象 Promise, 让异步函数 按顺序执行的例子 如下: 上边 是四个用Promise 处理过的 异步执行的函数: fn1.fn2.fn3.fn4 下面,让其按顺序执行 如下 ...
- VS2012安装完成之后,用自带的Blend无法创建WPF项目,打开WPF项目无法设计
Visual Studio 2012安装完成之后, 打开自带的Blend for Visual Studio 无法创建新的WPF或者Silverlight项.打开WPF项目无法编辑的原因: 1.VS自 ...
- JUnit4 入门笔记
Test注解的两个可选参数 expected timeout The Test annotation supports two optional parameters. The first, expe ...
- truncate delete 与 drop的区别
一张表几亿条数据.根据task_id删除几千万. delete删除后查询,发现查询速度还是没有变快.explain查看 rows并没有发生变化.查询速度肯定也不会变化.原因? truncate del ...
- Linux 通过进程Pid与端口互查
ps -aux 状态详解 https://blog.csdn.net/whatday/article/details/54409387. linux下通过进程名查看其占用端口: https://www ...
- SpringCloud之eureka服务注册和服务发现
服务注册中心 :eureka-server 作用:服务注册中心提供服务注册功能 服务提供方:eureka-client 作用:注册服务到服务注册中心 服务注册中心 :eureka-server 创建 ...
- 红米手机.驱动.XP安装
1.发现 官网上下载的 驱动在 XP下安装不上去... (Win7 记得 貌似 没有问题...) 1.1.网上搜到的 解决方案为:解决手机不能连电脑 XP系统无法安装MTP设备驱动的终极解决_小米No ...