关于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. ...
随机推荐
- 关于shared pool的深入探讨(六)-高Latch竞争案例
研究了几天shared pool,没想到忽然就撞到问题上来了.作为一个案例写出来给大家参考一下吧. 问题起因是公司做短信群发,就是那个18万买的4000字的短信小说(嘘,小声点,我也没看过...).群 ...
- Eclipse ftp插件
一个比较好的插件:esftp 下载地址http://sourceforge.net/projects/esftp/ 解压后放到plugins目录下重启即可. 配置estfp, 右击项目crm-> ...
- Python Tornado框架(ioloop对象分析)
网上都说nginx和lighthttpd是高性能web服务器,而tornado也是著名的高抗负载应用,它们间有什么相似处呢?上节提到的ioloop对象是如何循环的呢?往下看. 首先关于TCP服务器的开 ...
- nodejs的http.request使用post方式提交数据请求
官方api文档 http://nodejs.org/docs/v0.6.1/api/http.html#http.request虽然也有POST例子,但是并不完整. 直接上代码:http_post.j ...
- javascript 的dateObj.getTime() 在为C#的获取方式
public string GetTime(DateTime dt) { Int64 retval = 0; DateTime st = new DateTime(1970, 1, 1); TimeS ...
- div 文章内容自动分屏显示
<head runat="server"> <title></title> <script language="javascri ...
- c# 布局(stackpanel)
<Grid> <StackPanel> <Button Content="asas"> </Button> <Button C ...
- 检索并打印一个DNS主机条目
检索并打印一个DNS主机条目的 C 程序 --- Linux/Unix /*************************************************************** ...
- 转换数据库连接池为hikaricp
hikaricp号称是最快的,今天转换过来试试 1.修改配置文件 <!-- Hikari Datasource --> <bean id="dataSource&quo ...
- Spring_HelloWorld
目录: 各个类文件: pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="h ...