一、前言
最近做前端的时候,发现个奇怪的问题,ajax获取不到返回值了,问题是还是会到success中,也是可以正常打印的,就是没有response,奇怪。
二、正文
1、首先是不走success的问题
不走success
且请求是200
的话,大部分都是返回值的类型有问题,dateType
定义是json
,但返回的不是json
,修改datetype
即可。
2、走success,但是获取不到返回值
去掉dateType
之后,走success
了,但是没有返回值。这部分查找各种资料都没发现,后面发现是调用方式的问题,普通的ajax请求,访问控制器之后,控制器中的内容直接return即可,但是有一种情况是例外:
控制器:
public function index(){
test::parseData($this)
}
控制器是这种情况的话,处理逻辑是在test
类的parseData()
方法,我们在parseData()
方法处理完逻辑后,不能使用return
返回,要使用echo 'code=200'
这种方式,这样的话ajax
才能拿到这个返回值。
public static function parseData($controller)
{
echo json_encode($data);
}
使用echo的时候,就能获取到返回值了。
三、其他问题
1、点击ajax提交,F12查看发现有三个请求
(1) 首先是查看form
表单的action
部分,还有是否定义onsubmit()
方法,定义的话点击提交也会调用这个方法。
(2) 查看提交按钮的type
是button
还是submit
,submit
的话会自动提交表单,要修改为button
,然后调用js
进行提交。
2、去掉onsubmit方法,并且修改按钮为button之后,还有两个请求
这个就比较奇怪了,F12
点击network
,点击Doc
发现只有一个请求,但是点击XHR
发现有两个请求。代表实际的请求是只有一个的,但是有个js提交的空请求。
(1) 首先是检查form
表单外面是否包含有a
标签,a
标签的href
是否有值,最好是去掉href
(2) 采用ajax
提交表单的话,去掉form
的action
,哪怕action=''
都不行,我这里是因为这个action出错
(3) 有个类似的问题,可以参考:https://wwwblogs/Simcoder/archive/2011/12/01/2270256.html
不管是a
标签的href
还是img
的src
都是http
请求,不同浏览器对于这两个属性有不同的方案,firefox
浏览器运行时,检查到src=""的img
,会自动将src
赋值为iis
站点设置中的默认页.index
.aspx
参考:https://wwwblogs/Simcoder/archive/2011/12/01/2270256.html
3、表单的serializeArray()方法取不到disabled的元素?
答案:
(1)serializeArray()之前把元素的形态改回来。
(2)设置元素为readonly(如果符合应用情景的话)
end
更多推荐
ajax成功进入success但是获取不到返回值
发布评论