2016-08-12 54 views
1

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

回答

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); 
} 

拨打以下功能与波普尔的论点

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

是的,与ajax后参数到达其余服务,但我的休息服务返回八位字节流,所以ajax错误抛出,因为它不能处理这种类型 – Donatas

+0

你可以发布API响应,或在响应它是下载文件? –

+0

是的,它是下载文件,更确切地说是csv/pdf。 – Donatas

0

通常读你的修改问题,如果该参数是它可以通过以下方面引起的API空后。

  1. 形式不正确序列化
  2. 指定的内容类型是不是你的API是当你正在使用AJAX确保您的形式不指定任何动作和方法,否则有可能是一个问题接受
  3. API预期的模型与表单提交的模型不匹配
  4. 使用Ajax时,将按钮类型更改为“按钮”而不是“提交”。