2017-09-02 252 views
1

我有這種方法的一個問題:發送的請求體參數而不是查詢字符串

$.ajax({ 
     url: '/SalesOfferInvoiceDeliveryNote/InsertUpdateCAORAC/?cTa=b&cHTML=' + cHTML, 
     type: 'POST', 
     data: $(this).parents('form').serialize() 
//other part of method not shown, it's not relevant 

在服務器端方法的簽名是這樣的:

public string InsertUpdateCAORAC(FormCollection form = null, string cTa = "", string cHTML = null) 

我的問題是,cHTML等(它表示用於打印的動態創建表單的HTML)變得太快而不能通過查詢字符串發送。我希望這個參數在請求體內發送。我已經嘗試過:

 $.ajax({ 
      url: '/SalesOfferInvoiceDeliveryNote/InsertUpdateCAORAC/', 
      type: 'POST', 
      data: { 
      form: $(this).parents('form').serialize(), 
      cTa: 'b', 
      cHTML: cHTML 
      } 

在這種情況下,參數CTA和cHTML正確sended,但表單元素失去所有它的序列化鍵。 (使用這種Ajax調用方式的鍵是:form,cTa和cHTML,這是完全錯誤的)。有什麼我可以做的發送查詢字符串正文內的所有參數,該表單不失去它的關鍵?

回答

2

你的問題是在這條線:

form: $(this).parents('form').serialize(), 

可以以創建表單鍵/值對使用FormData。你可以看看Using FormData Objects

爲了增加額外的兩個參數,你可以使用FormData.append()像:

formData.append('cTa', 'b'); 
formData.append('cHTML', cHTML); 

你的AJAX可以是:

var formData = new FormData($(this).closest('form')[0]); 
formData.append('cTa', 'b'); 
formData.append('cHTML', cHTML); 
$.ajax({ 
    url: '/SalesOfferInvoiceDeliveryNote/InsertUpdateCAORAC/', 
    type: 'POST', 
    data: formData 
}); 
+0

我收到此錯誤:遺漏的類型錯誤:非法調用 – FrenkyB

+0

@FrenkyB錯誤是因爲你的服務器端** InsertUpdateCAORAC **錯誤。您需要刪除cta和chtml參數,因爲現在它們是表單的一部分,因此您可以像其他表單參數那樣獲取它們。讓我知道。謝謝 – gaetanoM

相關問題