0

ここにc#Webメソッドがあります

 [WebMethod]
    public string Hello()
    {
        return "Hello World";
    }

これがjquery ajaxコードです

$.ajax({
            url: "http://10.0.2.2/SampleService/Service/HelloWorld.asmx",
            dataType: 'text',
            cache: false,
            crossDomain: true,
            timeout: 15000,
            success: function (rtndata) {
                 alert('Got Success ::'+ rtndata);
            },
            error: function (xhr, errorType, exception) {
                alert("Excep:: "+exception +"Status:: "+xhr.statusText);
        }
        });

しかし、入る代わりに、完全な html 応答ページを取得していますHello Worldrtndata

4

4 に答える 4

0

メソッド名を URL に追加し (/HelloWorldたとえば、)、method: "post"ajax 呼び出しで指定する必要があります (POSTリクエストを使用する場合)。これを試して:

$.ajax({
    url: "http://10.0.2.2/SampleService/Service/HelloWorld.asmx/HelloWorld",
    method:"POST",
    dataType: "text",
    cache: false,
    crossDomain: true,
    timeout: 15000,
    success: function (rtndata) {
        alert('Got Success ::' + rtndata);
    },
    error: function (xhr, errorType, exception) {
        alert("Excep:: " + exception + "Status:: " + xhr.statusText);
    }
});

GETリクエスト メソッドとして使用する場合は、 web.configファイルに次のタグがあることを確認してください。

<system.web>
  <webServices>
    <protocols>
      <add name="HttpGet" />
      <add name="HttpPost" />
    </protocols>
  </webServices>
</system.web>

また、サービス メソッドを次のように装飾する必要がありますScriptMethodAttribute

[ScriptMethod(UseHttpGet = true)]
[WebMethod]
public string HelloWorld()
{
    return "Hello World";
}

ajax 呼び出し (method: "GET"のデフォルト メソッドであるため、オプションですtext):

$.ajax({
    url: "http://localhost:57315/helloworld.asmx/HelloWorld",
    method: "GET"
    dataType: "text",
    cache: false,
    crossDomain: true,
    timeout: 15000,
    success: function (rtndata) {
        alert('Got Success ::' + rtndata);
    },
    error: function (xhr, errorType, exception) {
        alert("Excep:: " + exception + "Status:: " + xhr.statusText);
    }
});

を使用しているので、おそらくrequestを使用しcache: falseたいと思うでしょう:GET

Setting cache to false will only work correctly with HEAD and GET requests.
It works by appending "_={timestamp}" to the GET parameters.
于 2013-07-10T11:07:47.417 に答える
0

html ページを受信する場合は、html ページを送信しているためです。

出力を送信する前に、コードを再確認して、応答に何かが追加されているかどうかを確認する必要があります。

次のような JSON 形式の応答を ajax 呼び出しに送信してみてください。

{'hello':'world'}

次に、$.ajax のオプションとして dataType を追加します。出力を印刷したい場合は、alert(JSON.stringify(response)) を実行できます。

$.ajax({
    url: "http://10.0.2.2/SampleService/Service/HelloWorld.asmx",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    cache: false,
    crossDomain: true,
    timeout: 15000,
    success: function (rtndata) {
        alert('Got Success ::' + JSON.stringify(rtndata));
    },
    error: function (xhr, errorType, exception) {
        alert("Excep:: " + exception + "Status:: " + xhr.statusText);
    }
});

重要なことがあります... cache: false を何度も追加しますが、これは適切に機能しないため、解決するためのトリックを実行する必要があります。

次のように、タイムスタンプを呼び出しのパラメーターとして追加します。

var date = new Date();
$.ajax({
    url: "http://10.0.2.2/SampleService/Service/HelloWorld.asmx?timestamp="+date.now(),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    cache: false,
    crossDomain: true,
    timeout: 15000,
    success: function (rtndata) {
        alert('Got Success ::' + JSON.stringify(rtndata));
    },
    error: function (xhr, errorType, exception) {
        alert("Excep:: " + exception + "Status:: " + xhr.statusText);
    }
});

お役に立てれば...

于 2013-07-10T11:07:11.757 に答える
0

表示される html ページは、サービサーで使用可能なすべての webmethod の概要 (一種の API) です。ブラウザで移動してみてください。

Hello WebMethod を呼び出したい場合は、"/Hello" をメソッド名として URL に追加する必要があります。

$.ajax({
  type: 'POST',
  contentType: 'application/json; charset=utf-8',
  url: 'http://10.0.2.2/SampleService/Service/HelloWorld.asmx/Hello',
  dataType: 'json',
  cache: false,
  crossDomain: true,
  timeout: 15000,
  success: function (rtndata) {
     alert('Got Success ::'+ rtndata);
  },
  error: function (xhr, errorType, exception) {
     alert("Excep:: "+exception +"Status:: "+xhr.statusText);
  }
});

ここで詳細を読むことができます: http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

于 2013-07-10T11:09:10.937 に答える
0

json モデルを返すか、レイアウトを無効にする必要があります

于 2013-07-10T10:55:34.067 に答える