EasyUI的Form表单异步提交问题-ThinkPHP5对EasyUI异步表单不返回json
2017-09-07 11:02
411 查看
今天整合TP5和EasyUI发现Chrome报了一个警告:Resource interpreted as Document but transferred with MIME type application/json
记得刚学TP框架的时候还是3.2.3一眨眼版本已经更新到5.0了,不得不让人感慨IT行业发展之迅猛!
话不多说,直接进入正题:
这次分享的是前端EasyUI做的画面,提交异步表单时候,后台TP5处理的一些问题,问题背景如下:
前端:
后台:
error方法会自动判断当前请求是否属于
success在
我使用的这个版本,success同样会对请求类型进行判断的!
这样使用问题会有两个:
简要说明一下原因:
问题1产生的原因是在于EasyUI的异步表单底层是创建一个iframe,从而使得这样的异步提交能上传文件,很明显这样的情况TP自然不能识别其为Ajax提交类型,故而success和error就会返回渲染后的两个模板;
问题2很同样很明显,就和你在页面中使用form后会跳转一个html页面一样容易理解.
解决方案:
对于问题1,熟悉框架[这个时候的tp5已经是依葫芦画Laraval一系列的主流框架了:) ]的都应该知道有伪装请求这样的东西,修改前端代码:
每一个有心去看框架内核,底层原理的程序员都值得肯定,因为念念不忘,必有回响!
记得刚学TP框架的时候还是3.2.3一眨眼版本已经更新到5.0了,不得不让人感慨IT行业发展之迅猛!
话不多说,直接进入正题:
这次分享的是前端EasyUI做的画面,提交异步表单时候,后台TP5处理的一些问题,问题背景如下:
前端:
$("#form").form({ onSubmit:function(param){ console.log("onSubmit"); return true; }, success:function(res){ console.log(res); console.log(JSON.parse(res)); } });很明显,这是一个使用easyui的异步提交模板,
后台:
public function cud_clerk(){ $form=input(''); $this->success("提交成功",null,$form); }这里注意一个问题,不像官方文档所说:
error方法会自动判断当前请求是否属于
Ajax请求,如果属于
Ajax请求则会自动转换为
default_ajax_return配置的格式返回信息。
success在
Ajax请求下不返回信息,需要开发者自行处理。
我使用的这个版本,success同样会对请求类型进行判断的!
这样使用问题会有两个:
1. 在form的success方法中,参数res为一段html代码 2. 如果后台改成json返回,浏览器会报一个警告:Resource interpreted as Document but transferred with MIME type application/json
简要说明一下原因:
问题1产生的原因是在于EasyUI的异步表单底层是创建一个iframe,从而使得这样的异步提交能上传文件,很明显这样的情况TP自然不能识别其为Ajax提交类型,故而success和error就会返回渲染后的两个模板;
问题2很同样很明显,就和你在页面中使用form后会跳转一个html页面一样容易理解.
解决方案:
对于问题1,熟悉框架[这个时候的tp5已经是依葫芦画Laraval一系列的主流框架了:) ]的都应该知道有伪装请求这样的东西,修改前端代码:
$("#form").form({ onSubmit:function(param){ param._ajax='1';//添加这行,伪装成ajax访问 console.log("onSubmit"); return true; }, success:function(res){ console.log(res); console.log(JSON.parse(res)); } });对于问题2,如果查看一下源码的话会发现success方法的原型:
/** * 操作成功跳转的快捷方法 * @access protected * @param mixed $msg 提示信息 * @param string $url 跳转的URL地址 * @param mixed $data 返回的数据 * @param integer $wait 跳转等待时间 * @param array $header 发送的Header信息 * @return void */ protected function success($msg = '', $url = null, $data = '', $wait = 3, array $header = []);没错,就是header,请求伪装强制响应!修改后台代码:
$this->success("ajax提交",null,$form,3,["Content-Type"=>"text/html;"]);这里不考虑OOP和设计模式的一些东西,就算是巧妙的解决了问题!
每一个有心去看框架内核,底层原理的程序员都值得肯定,因为念念不忘,必有回响!
相关文章推荐
- .NET easyui form提交后,返回json数据在IE下弹出下载的问题解决方法
- .NET easyui form提交后,返回json数据在IE下弹出下载的问题解决方法
- jquery序列化form表单使用ajax提交后处理返回的json数据
- 【Easyui】解决未对form表单数据进行校验直接就可以提交的问题
- form表单序列化为json数据,方便异步提交表单
- jQuery.form.js使用ajaxSubmit()提交表单时返回中文乱码的问题
- javascprit form表单提交前验证以及ajax返回json
- jquery序列化form表单使用ajax提交后处理返回的json数据
- form表单,easyUi,jquery提交后,SpringMvc后台返回时,IE浏览器提示下载文件
- 表单 - Form - EasyUI提供的表单异步提交
- easyUI-form表单提交,正确返回但是不执行success
- easyui使用Ajax提交表单,返回Json数据
- 带返回值的Form表单的异步提交(struts+json+jQuery.form)
- springmvc+easyui Ajax提交返回json IE出现下载问题
- ajax异步、同步问题,KindEditor ajax提交内容,ajax提交form表单 解决按两次的问题
- jQuery Easyui form 提交验证 与 json数据返回结果的处理
- spring security的ajax提交和json返回数据--兼容form表单提交
- Jquery异步提交返回json结果问题
- EasyUI 使用form方式提交表单,返回结果时,IE提示下载(火狐无问题)
- form 表单提交后返回json 回调处理返回结果