0

完全に混乱しています。

  1. jquery v1.5.2 Firefox 3.6.16 ASMX
  2. リストアイテム
  3. VS 2010、.NetFramework3.5で記述されたWebサービス
  4. ローカルコンピューターのVS2010開発Webサーバーでホストまたはオン
  5. Windows Web Server2008R2でIIS7.5を実行しているメインWebサーバー

ローカル開発Webサーバーとメインの本番Webサーバーの両方が同じ動作を示します

  1. Webサービスは、ブラウザーから呼び出されたときに適切に機能します。
  2. メソッドのリストを取得します。
  3. メソッド名をクリックできます
  4. [呼び出し]ボタンをクリックすると、メソッドが呼び出され、結果が返されます

jqueryページが同じWebメソッドを呼び出すと、次のステータスフィールドでエラー関数が発生します

readyState:0 responseText: "" status:0 statusText: "error" error:function()

私のjQuery部分

        <script type="text/javascript">
              $(document).ready(function() {
                    $.ajax({
                        type: 'POST',
                        url: 'http://localhost:1272/ndtvservices.asmx/HelloWorld',
                        data: '{}',
                        contentType: 'application/json; charset=utf-8',
                        dataType: 'json',
                        success: function(msg) {
                                 alert("success " + msg) ;
                        },
                        error: function(xhr, status, error) {
                                 var err = eval("(" + xhr.responseText + ")");
                                 alert(err.Message) ;
                        }
                    });
               });
        </script>

私のウェブメソッド

System.Web.Servicesをインポートします

System.Web.Services.Protocolsをインポートします

System.ComponentModelをインポートします

System.Web.Script.Servicesをインポートします

System.Web.Script.Serializationをインポートします

'ASP.NET AJAXを使用してスクリプトからこのWebサービスを呼び出せるようにするには、次の行のコメントを解除します。'_

_

_ _

パブリッククラスService1はSystem.Web.Services.WebServiceを継承します

'<ScriptMethod(ResponseFormat:=ResponseFormat.Json, UseHttpGet:=False, XmlSerializeString:=False)> _
<WebMethod()> _
Public Function HelloWorld() As String
    Dim js As New JavaScriptSerializer
    Dim s As String = "Hello World"
    Dim sReturn As String = js.Serialize(s)
    Return sReturn
End Function

エンドクラス

どこかでSOを読んだときに、system.webの下の私のWeb構成にこれらのエントリがあります

  <webServices>
    <protocols>
      <add name="HttpGet"></add>
      <add name="HttpPost"></add>
    </protocols>
  </webServices>

_

私は上記のステートメントをコメントおよびコメントなしで試しました。

私がこれを理解しているので、これは、このメソッドを呼び出すasp.net以外のajaxページには必要ありません。

私は何が間違っているのですか?

本当にありがとう

幸運をお祈りしています

Iyer

4

1 に答える 1

2

サービスメソッドで応答を手動でJSONシリアル化しないでください。ASP.NETはすでにそれを自動的に行います。あなたに必要なのは:

<WebMethod()> _
Public Function HelloWorld() As String
  Return "Hello World"
End Function

そして、サービスがScriptService属性で装飾されていることを確認してください(私のVB.NETはかなり錆びているので、これは少しずれている可能性があります):

<ScriptService()> _
Public Class ndtvservices Inherits WebSerivce

また、$。ajax()のurlパラメーターで完全修飾URIを使用することは避けます。必要なのはこれだけです。

url: '/ndtvservices.asmx/HelloWorld'

最後に、ASP.NET 3.5以降を使用している場合、ASP.NETはJSON応答を「.d」オブジェクトでラップして、 JSON配列に関する特定のセキュリティ問題から保護します。次のように、成功コールバックでそのラッパーオブジェクトに「ドット」を付ける必要があります。

success: function(msg) {
  alert("success " + msg.d) ;
}
于 2011-04-07T05:41:26.290 に答える