ajax用的是jquery中的,在向后退发送请求后执行success中的function操作,
$('#btna').on('click', function () { var a = $(".check"); var roomlist = []; a.each( function (index) { roomlist.push(a[index].getAttribute('dataid')); } ); $.ajax({ url: "{:url('admin/Main/btna')}", type: "post", data: { 'roomid': JSON.stringify(roomlist) }, dataType: 'json', success: function (res) { window.location.reload(); } }); })
这是一个按钮的点击事件执行的js操作,在请求成功后,只想实现页面自动刷新功能,wimdow.location.reload(),但是出现了问题,一直没有效果,
php部分的代码是这样的
public function btna(Request $request) { // $this->islogin(); $roomid = $request->param('roomid'); $a = json_decode($roomid, true); foreach ($a as $k => $v) { $res = Db::table('room')->where('room_id', $v)->update(['static' => '1', 'color' => 'blue']); } // if ($res > 0) { // $msg = [ // 'status' => 0, // 'msg' => '修改成功', // 'roomid' => $roomid // ]; // } else { // $msg = [ // 'status' => 1, // 'msg' => '修改未成功', // 'roomid' => $roomid // ]; // } // return $msg; }
此时if判断后的为已经注释掉的,那么问题就出现了,为什么后台没有给返回值,而且js中也不需要接收任何值,自动刷新功能还是不执行?
有两个解决办法:
1.假如说后台值执行代码,不返回任何值给ajax,此时我们需要将 dataType: 'json' 这段进行删除,则自动刷新功能就可以实现
2.加入说后台需要给ajax一个返回值,则需要将注释的部分放开,让这段代码执行,前台ajax的部分不需要改动,同样也可以执行success中的操作,关键就是这个平时
没有注意到的 dataType: 'json' ,
dataType: 'json' , 预期服务器返回的数据类型,如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如XML MIME类型就被识别为XML。在1.4中,JSON就会生成一个JavaScript对象,而script则会执行这个脚本。随后服务器端返回的数据会根据这个值解析后,传递给回调函数。可用值:
"xml": 返回 XML 文档,可用 jQuery 处理。
"html": 返回纯文本 HTML 信息;包含的script标签会在插入dom时执行。
"script": 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了"cache"参数。'''注意:'''在远程请求时(不在同一个域下),所有POST请求都将转为GET请求。(因为将使用DOM的script标签来加载)
"json": 返回 JSON 数据 。
"jsonp": JSONP 格式。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
"text": 返回纯文本字符串