2009-06-30 25 views
16

我一直有這個代碼的問題,我花了最後3個小時挖掘並試圖找到答案。由於我沒有成功,我將只張貼代碼,並要求辦理哪種參數我應該有我的web服務這個請求:ASP.NET:jQuery AJAX的'數據'參數問題

var args = [{ key: 'myId', value: 'myValue' }, { key: 'myOtherId', value: 'myOtherValue'}]; 
var dataToSend = { name: 'fooId', value: 'fooValue', args: args }; 
$.ajax({ 
type: 'POST', 
url: 'fooURL', 
data: dataToSend, 
contentType: 'application/json; charset=utf-8', 
dataType: 'json', 
success: OnSuccess, 
error: OnError 
}); 

現在,我必須能夠哪種簽名得到我的「dataToSend」?

我已經試過:

[WebMethod, ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string Foo(string name, object value, List<Args> args) 
{ 
    return "OK"; 
} 

public class Args 
{ 
    public string key { get; set; } 
    public object value { get; set; } 
} 

[WebMethod, ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string Foo(string name, object value, object[] args) 
{ 
    return "OK"; 
} 

[WebMethod, ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string Foo(dataToSend dataToSend) 
{ 
    return "OK"; 
} 

public class dataToSend 
{ 
    public string name { get; set; } 
    public object value { get; set; } 
    public List<Args> args = new List<Args>(); 

} 
public class Args 
{ 
    public string key { get; set; } 
    public object value { get; set; } 
} 

回答

22

嘗試傳遞數據作爲一個字符串,而不是一個對象,即:

 
$.ajax({ 
    ... 
    data : '{ a: 2, b: 3 }', 
    ... 
}); 

這樣做的原因是,如果你指定一個對象作爲數據然後jQuery的序列化使用的查詢字符串格式的數據,而服務器直接期待JSON格式。

雖然告訴jQuery使用JSON作爲數據類型,但這似乎只與結果有關,而不是發送到服務器的請求負載。

你在那裏的一切看起來都對我很正確。

+3

很確定山姆在這裏。有關更多信息,請參閱http://elegantcode.com/2009/02/21/javascript-arrays-via-jquery-ajax-to-an-aspnet-webmethod/。假設字符串修復了它,我認爲它會成爲第一個語法。 – 2009-06-30 12:21:18

0

如果你啓用了JSON-.NET Web服務/工作的WebMethod ...我的提示是:

  • 對web.config配置要非常小心。使用它來啓用大參數,POST方法和JSON。

  • 使用框架來處理對象序列化和反序列化。我會推薦NewtonSoft的Json.NET。

我不認爲ASP.NET自動爲你做,你的參數總是字符串。你應該使用這些字符串,反序列化並將其轉換爲一組對象。

+0

我認爲它。檢查了這一點(雖然它的MVC相同的概念應該適用於Web窗體):http://blogger.forgottenskies.com/?p=243 – 2009-06-30 06:02:53

2

雖然這是一個較舊的帖子,我以爲我會貢獻。我一直在發送一個關聯數組的同一個想法,一個接受的帖子,我發現它更容易編寫。

的Javascript

postData[0] = 'data!'; 
postData[1] = 'moar data!'; 
postData[2] = 'and some data'; 

$.ajax({ 
    type: 'POST', 
    url: 'postUrl', 
    data: { data: postData }, 
}); 

PHP

$data = $_POST['data'][0]; 
$moar_data = $_POST['data'][1]; 
$and_some_data = $_POST['data'][2];