2009-06-30 13 views
16

私はこのコードに問題がありました。私は過去3時間を掘り下げて答えを見つけようとしていました。私は成功しなかったので、私は、コードを掲載します、私はこの要求を処理するために自分のWebサービス上で持つべきパラメータの種類を問う:ASP.NET:jQuery AJAXの 'data'パラメータの問題

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形式を直接期待しています。

JSONをデータ型として使用するようにjQueryに指示したにもかかわらず、これは起こります。結果ペイロードはサーバーに送信されたものではなく、結果に関連しているようです。

あなたが持っているものはすべて私に似ています。

+3

Samはここにそれがあります。詳細については、http://elegantcode.com/2009/02/21/javascript-arrays-via-jquery-ajax-to-an-aspnet-webmethod/を参照してください。文字列を修正すると仮定すると、最初の構文になると思います。 –

0

あなたはJSON対応の.NET Webサービス/ WebMethodので作業している場合...私のヒントは:

  • web.configの設定には十分注意してください。これを使用して、大きなパラメータ、POSTメソッド、およびJSONを有効にします。

  • オブジェクトの直列化と逆シリアル化を処理するフレームワークを使用します。私はNewtonSoftのJson.NETをお勧めします。

私はASP.NETが自動的にそれを行うとは思わない、あなたのパラメータは常に文字列です。あなたは、その文字列を取ってデシリアライズし、オブジェクトの配列に変換する必要があります。

+0

私はそれがないと思います。これをチェックしてください(Webフォームにも同じコンセプトを適用する必要がありますがMVCです):http://blogger.forgottenskies.com/?p=243 –

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];