关于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. ...
随机推荐
- jdk1.7 ArrayList源码浅析
参考:http://www.cnblogs.com/xrq730/p/4989451.html(借鉴的有点多,哈哈) 首先介绍ArrayList的特性: 1.允许元素为空.允许重复元素 2.有序,即插 ...
- Python(函数的参数)
函数参数的使用 def foo(x,y): pass foo(1,2) 形参:就是变量名 实参:就是变量值 形参:位置形参,默认参数,*args,命名关键字参数,**kwargs 实参: 按位置传值的 ...
- Spring框架学习之IOC(一)
Spring框架学习之IOC(一) 先前粗浅地学过Spring框架,但当时忙于考试及后期实习未将其记录,于是趁着最近还有几天的空闲时间,将其稍微整理一下,以备后期查看. Spring相关知识 spri ...
- UVALive 6906 A - Cluster Analysis
思路:排个序,依次选就好了. #include <bits/stdc++.h> #define PB push_back #define MP make_pair using namesp ...
- bug最后汇总-2018/08/03
一.对于点击后请求时间过长的按钮 现象:容易给用户点击无效的错觉,从而导致多次点击,从而发出多个相同请求,这显然是不符合我们意愿的 解决: 用户点击发出多个请求:加个锁,当用户点击后,将锁关闭,使用户 ...
- 使用Linq to XML 修改app.config
使用其他的方法修改app.config无效.而且修改的是*.vshost.exe.Config,程序运行时正常,关闭之后就还是原来的值. Configuration configuration = C ...
- powerdesign初级入门教程
首先我们需要创建一个测试数据库,为了简单,我们在这个数据库中只创建一个Student表和一个Major表.其表结构和关系如下所示. 看看怎样用PowerDesigner快速的创建出这个数据库吧. 1. ...
- CPU与GPU区别 通俗易懂
转:https://blog.csdn.net/xiaolang85/article/details/51500340 有网友在网上提问:“为什么现在更多需要用的是 GPU 而不是 CPU,比如挖矿甚 ...
- [BZOJ1018]堵塞的交通traffic
Description 有一天,由于某种穿越现象作用,你来到了传说中的小人国.小人国的布局非常奇特,整个国家的交通系统可以被看成是一个2行C列的矩形网格,网格上的每个点代表一个城市,相邻的城市之间有一 ...
- HDU 5703
题意:给你一个数n,问将n分为正整数和的方案数.如n=3共四种,1 1 1 , 1 2 , 2 1 ,3 . 思路:隔板法,n个1,有n-1个空位,每个空位可以选择是否插入隔板,插入k(0<=k ...