ajax成功进入success但是获取不到返回值

一、前言

      最近做前端的时候,发现个奇怪的问题,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) 查看提交按钮的typebutton还是submitsubmit的话会自动提交表单,要修改为button,然后调用js进行提交。

2、去掉onsubmit方法,并且修改按钮为button之后,还有两个请求

这个就比较奇怪了,F12点击network,点击Doc发现只有一个请求,但是点击XHR发现有两个请求。代表实际的请求是只有一个的,但是有个js提交的空请求。

(1) 首先是检查form表单外面是否包含有a标签,a标签的href是否有值,最好是去掉href

(2) 采用ajax提交表单的话,去掉formaction,哪怕action=''都不行,我这里是因为这个action出错

(3) 有个类似的问题,可以参考:https://www.cnblogs.com/Simcoder/archive/2011/12/01/2270256.html
      不管是a标签的href还是imgsrc都是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

你可能感兴趣的:(JS)