关于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. ...
随机推荐
- 用css 添加手状样式,鼠标移上去变小手
用css 添加手状样式,鼠标移上去变小手,变小手 用css 添加手状样式,鼠标移上去变小手,变小手 cursor:pointer; 用JS使鼠标变小手onmouseover(鼠标越过的时候) onmo ...
- 错误:未启用当前数据库的SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker。
解决方法: 打开SQL Server,新建查询: ALTER DATABASE 数据库名 SET NEW_BROKER WITH ROLLBACK IMMEDIATE;ALTER DATABASE 数 ...
- hibernate 关联关系
<hibernate-mapping package="com.srts.system.domain"> <class name="Sys_UserRo ...
- 199. Binary Tree Right Side View -----层序遍历
Given a binary tree, imagine yourself standing on the right side of it, return the values of the nod ...
- Python框架之Tornado(请求)
概述 本篇就来详细介绍tornado服务器(socket服务端)是如何接收用户请求数据以及如果根据用户请求的URL处理并返回数据,也就是上图的3系列所有步骤,如上图[start]是一个死循环,其中利用 ...
- npm国内镜像设置
http://cnodejs.org/topic/4f9904f9407edba21468f31e
- Spark机器学习3·推荐引擎(spark-shell)
Spark机器学习 准备环境 jblashttps://gcc.gnu.org/wiki/GFortranBinaries#MacOS org.jblas:jblas:1.2.4-SNAPSHOT g ...
- 项目中使用better-scroll实现移动端滚动,报错:Cannot read property 'children' of undefined better-scroll
就是外面的盒子和要滚动的元素之间要有一层div, 插件挂载的元素是menuWrapper,可以滚动的元素是ul,在这两个元素之间加一个div元素即可解决问题.
- SpringBoot AOP控制Redis自动缓存和更新
导入redis的jar包 <!-- redis --> <dependency> <groupId>org.springframework.boot</gro ...
- Linux 下的 core dump
core dump 的基本概念 当一个进程要异常终止时 ,可以选择把进程的用户空间内存数据全部保存到磁盘上 ,文件名通常是 core, 这叫做 Core Dump.通常情况下,core文件会 ...