1

解決済み:AJAX Webサービスから辞書を返すことはできません。リストを使用してください!

jQueryからASP.NETWebサービスを呼び出そうとしています。

Webサービスは実行されますが、結果はjavascriptに返されません。なぜですか?web.configまたは..に何かが欠けている可能性があると思います。

jQuery:

function GetAccountTypes() {
        var ddl = $("#ListBoxType");
        clearSelect(ddl.attr("id"));
        $.ajax({
            type: "POST",
            url: "WebService.asmx/GetAccountTypes",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
                alert(response.d);
                var accTypes = response.d;
                var options = ddl.attr("options");
                $.each(accTypes, function (index, accType) {
                    options[options.length] = new Option(accType.Value, accType.Key); 
                });
            },
            failure: function (msg) {
                alert(msg);
            }
        });
    }

ウェブサービス:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
[System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService {

public WebService()
{
}

[WebMethod]
public Dictionary<int, string> GetAccountTypes() {
    Dictionary<int, string> types = new ATDB().GetAccountTypes();
    return types;
}

}

web.config:

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0"/>
  </system.web>
</configuration>

js関数とWebサービスメソッドにブレークポイントを設定すると、メソッドは実行されますが、「成功」または「失敗」に達することはありません。

4

2 に答える 2

2

さて、IDoctionaryを実装し、シリアル化できないため、Webサービスから辞書を返すことができないことがわかりました。解決策:単純なカスタムオブジェクトのリストを返します。

于 2013-03-12T01:43:02.437 に答える
0

関数GetAccountTypes()はjson形式を待ちます...サービスが辞書をjson形式で返すことを確認しますか?違うと思う。

WebサービスはSOAPベースのWebサービスであるため、WebサービスをWCFに移行することを検討してください。この場合、必要な出力形式を細かく制御できます。

この資料をチェックしてください

http://blog.clauskonrad.net/2010/11/how-to-expose-json-endpoint-from-wcf.html

于 2013-03-12T01:05:53.407 に答える