JQuery提交表单参数为空

时间:2016-08-12 09:08:05

标签: javascript jquery post content-type

我使用$('#myForm').submit提交表单我的其他服务接受application/x-www-form-urlencoded的内容类型,但是当使用submit()时,我无法在浏览器开发人员工具和表单的XHR标签中看到该请求参数没有到达Rest服务,我可以使用AJAX post并指定content-type,但是Rest服务产生八位字节流,换句话说响应包含一个可下载的文件csv / pdf,什么可以是正确提交表单的解决方案?< / p>

2 个答案:

答案 0 :(得分:1)

为什么你没有使用$ .ajax()类型:“post”?你可以轻松设置标题

// Request with custom header
$.ajax({
    url: 'foo/bar',
    type: 'post',
    headers: { 'content-type': 'application/x-www-form-urlencoded' },
    data: {}, // object of your data
    success: function(response){
       alert(response)
    }
});

如果您的api响应是八位字节流或可下载文件,那么您必须创建虚拟表单并通过jQuery发布它,因为通过AJAX无法下载文件..当文件下载时当前页面的内容将保持不变活动表格已发布。

function autoGenerateAndSubmitForm(method, url, post_data) {
    var element = document.getElementById("virtual_form");
    if(element != null )
    {
        element.parentNode.removeChild(element);
    }
    var form = document.createElement("form");
    form.setAttribute("id", "virtual_form");
    form.setAttribute("style", "display:none;");
    //form.setAttribute("target", "_blank"); // remove comment if you want to open it in new tab
    form.method = method;
    form.action = url;   
    for(i in post_data)
    {
         var element=document.createElement("input");
         element.value=post_data[i];
         element.name=i;
         form.appendChild(element); 
    }
    document.body.appendChild(form);
    form.submit();
    form.parentNode.removeChild(form);
}

使用您的poper参数调用以下函数

autoGenerateAndSubmitForm('POST','your_url',{your_post_data_object:"Here"});

答案 1 :(得分:0)

在阅读修改后的问题后,通常如果API中的参数为空,则可能由以下原因引起。

  1. 表格未正确序列化
  2. 指定的内容类型不是您的API接受的内容
  3. 当您使用ajax时,请确保您的表单未指定任何操作和方法,否则可能会出现问题。
  4. API期望的模型与表单提交的模型不匹配
  5. 使用Ajax时,将按钮类型更改为“按钮”而不是“提交”。