2016-08-12 58 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時,將按鈕類型更改爲「按鈕」而不是「提交」。