form用pjax提交时后台接不到数据

form用pjax提交,request的Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryKa7A4askWRsS9x26,然后数据在Payload中,服务器接不到数据。

前端代码如下:

#@layout()

#define main()
  <form testform class="ui form" action="/employee/save" method="post">
    <table align="center">
      <input type="hidden" name="id" value="#(emp.id)">
      <tr>
        <td>工号:</td>
        <td><input type="text" name="code" value="#(emp.code)"></td>
      </tr>
      <tr>
        <td>姓名:</td>
        <td><input type="text" name="name" value="#(emp.name)"></td>
      </tr>
      <tr>
        <td>性别:</td>
        <td><input type="text" name="sex" value="#(emp.sex)"></td>
      </tr>
      <tr>
        <td>企业id:</td>
        <td><input type="text" name="companyId" value="#(emp.company_id)"></td>
      </tr>
      <tr>
        <td><button class="ui primary button" type="submit" ><i class="save icon"></i> 保存</button></td>
      </tr>

    </table>
  </form>
  <script type="text/javascript">
    $(function(){
     var tabid = dlayout.tab.conf.currentTabId;

     $(document).on('submit', 'form[testform]', function(event) {
         //sevent.preventDefault(); // stop default submit behavior
         $.pjax.submit(event, '#pjax-' + tabid, {push: false});
     });
    });
  </script>

#end

request header:

General
Request URL:http://localhost/employee/save
Request Method:POST
Status Code:200 OK
Remote Address:[::1]:80
Response Headers
Content-Type:text/html;charset=UTF-8
Server:Jetty(8.1.8.v20121106)
Transfer-Encoding:chunked
Request Headers
Accept:text/html, */*; q=0.01
Accept-Encoding:gzip, deflate
Accept-Language:zh-CN,zh;q=0.8
Connection:keep-alive
Content-Length:516
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryaRTObSOQ5FGbMfBm
Cookie:autoLogin=false; jfinalId=30e8c2fa79a048efb0e6b0393d35f668; _jfinal_captcha=80a2861819c84eef9a9c73fb93ae6631
Host:localhost
Origin:http://localhost
Referer:http://localhost/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.5194.400 QQBrowser/9.7.13269.400
X-PJAX:true
X-PJAX-Container:#pjax-tab0
X-Requested-With:XMLHttpRequest
Request Payload
------WebKitFormBoundaryaRTObSOQ5FGbMfBm
Content-Disposition: form-data; name="id"

27
------WebKitFormBoundaryaRTObSOQ5FGbMfBm
Content-Disposition: form-data; name="code"

100
------WebKitFormBoundaryaRTObSOQ5FGbMfBm
Content-Disposition: form-data; name="name"

bright1
------WebKitFormBoundaryaRTObSOQ5FGbMfBm
Content-Disposition: form-data; name="sex"

1
------WebKitFormBoundaryaRTObSOQ5FGbMfBm
Content-Disposition: form-data; name="companyId"

10
------WebKitFormBoundaryaRTObSOQ5FGbMfBm--

跳转和pjax刷新都正常。

评论区

himans

2018-06-15 09:51

这个问题卡了1天了,快崩溃了。

JFinal

2018-06-15 10:21

@himans 上面的表述肯定是错误的,url 都不是同一个,与是否 getFile 毫不相关

himans

2018-06-15 13:31

按照James的提示:
方法中没有加getFile之前:
JFinal-3.4 action report -------- 2018-06-15 10:14:25 --------------------------
Url : GET /employee/update
Controller : xxx.EmployeeCtroller.(EmployeeCtroller.java:1)
Method : update
Interceptor : xxx.interceptor.LoginSessionInterceptor.(LoginSessionInterceptor.java:1)
xxx.admin.common.PjaxInterceptor.(PjaxInterceptor.java:1)
Parameter : id=28 _pjax=#pjax-tab0
--------------------------------------------------------------------------------
方法中加入getFile之后:
JFinal-3.4 action report -------- 2018-06-15 10:14:28 --------------------------
Url : POST /employee/save
Controller : xxx.employee.EmployeeCtroller.(EmployeeCtroller.java:1)
Method : save
Interceptor : xxx,.common.interceptor.LoginSessionInterceptor.(LoginSessionInterceptor.java:1)
xxx._admin.common.PjaxInterceptor.(PjaxInterceptor.java:1)
Parameter : companyId=123 name=1ffff sex=1 code=100 id=28

himans

2018-06-15 13:33

打算弃用pjax提交form,采用jquery form来提交,使用target来处理pjax中区块置换的问题。

jfinalcloud

2018-07-29 12:09

我跟你遇到相同的问题了,确实后台接收不到参数,如果用正常的表单提交不用pjax.submit方式提交参数是都正常的。我也跟踪数据包了,确实传走了,后台也在跟踪jfinal源码,确实没有数据!!!只能手动做异步先保存,然后再页面pjax单独跳转了。回头弄一个servlet的写法瞧瞧能否获取到参数,如果各位有好的办法或已经解决了这个现象,帮忙提一下,不能让这个问题沉下去。

jfinalcloud

2018-07-29 12:41

我刚用纯粹的Servlet试了,获取不到参数。而且在pjax.submit提交时,不会走servlet的post,居然进入的是get

Request URL:http://127.0.0.1:801/baseplatform2/coderServlet
Request Method:GET
Status Code:200
Remote Address:127.0.0.1:801
Response Headers
view source
Content-Length:0
Content-Type:text/html;charset=UTF-8
Date:Sun, 29 Jul 2018 04:36:51 GMT
Request Headers
view source
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:zh-CN,zh;q=0.8
Connection:keep-alive
Cookie:JSESSIONID=C9D7AE561BCAE9B715D0BFF93C3C2A64
Host:127.0.0.1:801
Referer:http://127.0.0.1:801/baseplatform2/coder/index
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36

我的form标签


我的JS
/**
* 没有解决pjax.submit为什么参数提交不了后台,稍后再做研究!!!
*/
$(document).on("submit", "form[data-pjax]", function(event) { // 提交表单按钮监听事件
if($("#coderForm").parsley().validate()) { // 先验证表单数据
$.pjax.submit(event, "#" + RIGHT_INDEX_CONTAINERDIV , {push:false});
return true;
}
return false;
});

himans

2018-07-31 15:42

@jfinalcloud 原因是pjax的form提交(post)是文件方式,get方式没问题。解决方法有2个:1、controller中的方法中先调用getFile()方法即可获得(不推荐);2、Pjax我只做跳转,提交form还是使用ajaxForm来做。

永字诀

2020-01-07 21:11

遇到同样问题了

himans

2020-03-15 12:08

@永字诀 已经放弃使用pjax直接提交form,用ajaxForm手动提交,还可以额外上传rawdata,比较好用。