1

私はここの投稿を読んで、私の知る限り従いましたが、Web サービスから json を返すことはできません。

Web サービス、.Net 4.0

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 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 JsonWS : System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
public string Sum()
{
    string x = "1", y = "2";
    return x + y;
}

}

これが私のjquery呼び出しです。

<script>
$(function () {
    $('#btn_test').click(function () {
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "http://localhost/jsontest/JsonWS.asmx/Sum",
            dataType: "json",
            success: function (json) {
                alert(json.d);
            },
            error: function () {
                alert("Hit error fn!");
            }
        });
    });
});

このエラーは、Web サービスが返していることによるものです...

<string xmlns="http://tempuri.org/">12</string>

ありがとう。

4

2 に答える 2

0

説明

文字列を返すため、文字列を取得します。オブジェクトを返す必要があります。オブジェクトはJSonに変換されます。

サンプル

public class MyClassName 
{
   public string x { get; set }
   public string y { get; set }
}

[WebMethod]
[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
public MyClassName Sum()
{
    return new MyClassName { x = "1", y = "2" };
}

アップデート

匿名タイプを返すこともできます。この場合、オブジェクトは必要ありませんMyClassName

[WebMethod]
[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
public MyClassName Sum()
{
    return new { x = "1", y = "2" };
}

詳しくは

于 2012-04-20T13:26:02.307 に答える
0

アップデート:

クロス ドメイン (jsonp) を Web サービスで動作させることができなかったため、.aspx ページに切り替えて、Response.Write() を使用してロジックを Page_Load に配置しました。魅力のように機能します。

このような作業を始めたばかりの人は、「callback=?」に注意してください。パラメータ。もう 1 つの注意点として、レスポンスのフラッシュとクローズは、Chrome を除くすべてのブラウザで問題ありません。これにより、ストリームがサーバーによって閉じられたというレスポンスがブラウザに送信されるためです。Chrome はこれを別の方法で処理します。放っておけば大丈夫です。

于 2012-04-24T12:20:05.287 に答える