一、前言
最近做前端的时候,发现个奇怪的问题,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://www.cnblogs.com/Simcoder/archive/2011/12/01/2270256.html
不管是a标签的href还是img的src都是http请求,不同浏览器对于这两个属性有不同的方案,firefox浏览器运行时,检查到src=""的img,会自动将src赋值为iis站点设置中的默认页.index.aspx
参考:https://www.cnblogs.com/Simcoder/archive/2011/12/01/2270256.html
3、表单的serializeArray()方法取不到disabled的元素?
答案:
(1)serializeArray()之前把元素的形态改回来。
(2)设置元素为readonly(如果符合应用情景的话)
end
本文探讨了前端开发中Ajax请求无法获取返回值的问题,分析了dataType设置不当及控制器内部处理逻辑不当导致的常见原因,并提供了具体解决方案,同时讨论了表单提交时的多个请求问题及serializeArray()方法的使用技巧。
2076





