以下の機能が正常に動作しません。シリアル化が間違っているようです。これは、さまざまなデータバリアントの約5回目の反復です。私は元々、WCFでの作業と同じように、データ:{'id':id}を実行していましたが、ASMXでは機能していません。データをid:1234ではなくid = 1234としてシリアル化しているように見えますが、私はこれにかなり慣れていません。どんな助けでもいただければ幸いです。ああ、ブラウザで直接サービスを呼び出すことができ、データが正しく返されるので、サービスではないことがわかります。
function getVentID(id) {
//look up id in database and get VentID
alert('id: ' + id);
var jsdata = { "id": + id}
$.ajax({
type: 'POST',
contentType: 'application/json; charset=utf-8',
url: 'services/UserService.asmx/getVentID',
data: jsdata,
dataType: 'json',
success: function (msg) {
alert(msg.d);
},
error: function (a, b, c) {
alert('Error: ' + a.toString() + ' ' + b.toString() + " " + c.toString());
}
});
}
p.s.私は10の同じ質問があることを知っていますが、それらのどれも私が見つけることができた、または私のために働いた答えを持っていません。
考えられる最も簡単な修正は、var jsdata
で始まる行を次のように変更することです。
var jsdata = '{id:' + id + '}';
問題は、jQueryがjsdataをjsonではなくフォームデータとしてエンコードしていることです。 dataType
パラメーターは、POSTデータのエンコード方法ではなく、応答の解析方法に影響します。
私の知る限り、jQueryには実際にはJSONシリアル化コードはありません。どうやら ジョン・レシグはダグラス・クロックフォードのjson2.jsの使用を提案しています 。
これを使用するには、json.jsへのスクリプト参照を追加してから:
var jstext = JSON.stringify(jsdata, null, 2);
私は今この問題を解決しました。
次の形式でURLを渡す必要があります。
http://domain.com.br/service.asmx/method?objParam= {q: "search"}
また、service.asmxファイルで、次のメソッドを宣言する必要があります。
Public Function method(objParam As Dictionary(Of String, String))
End Function
コードでは、次のようになります。
function getVentID(id) {
var jsdata = {
"id": +id
}
var sData = JSON.stringify(jsdata); //convert your json in string
$.ajax({
type: 'POST',
contentType: 'application/json; charset=utf-8',
url: 'services/UserService.asmx/getVentID',
data: {
id: sData
},
dataType: 'json',
success: function(msg) {
alert(msg.d);
},
error: function(a, b, c) {
alert('Error: ' + a.toString() + ' ' + b.toString() + " " + c.toString());
}
});
}