0

わかりました、ここに私の問題があります:

asmx 形式で適切に呼び出され、文字列を返す 2 つの Web サービス メソッドがあります。

namespace myNameSpace
{
    [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 myClass : System.Web.Services.WebService
    {
        [WebMethod]
        public string myMethod1()
        {
           //some code
           return ss1; // ss1 is my returned string
        }
        [WebMethod]
        public string myMethod2(string s, string p, string x, string y)
        {
           //some code
           return ss2; // ss2 is my returned string
        }

私が望むのは、これらのメソッドを JavaScript から呼び出して、適切な文字列値を取得し、最後に返された値をアラート ウィンドウに表示することだけです。これを行うには、JavaScript でコールバック関数を使用します。

<script>
function pressButton()
{
   myNameSpace.myClass.myMethod1(succeededCallBack1);

   function succeededCallBack1(strResponse1)
   {
      //some operation with strResponse1
      myNameSpace.myClass.myMethod2(s, p, x, y, succeededCallBack2);

      function succeededCallBack2(strResponse2)
      {
         alert(strResponse2);
      }
   }
}
</script>

これで、strResponse1 を正常に取得し、それを使用して操作を実行し、javascript から myMethod2 を正常に呼び出し (このメソッド内にブレークポイントを挿入するとヒットします)、ss2 文字列が適切に設定されます。問題は、succededCallBack2 関数がスクリプト内で呼び出されず、アラート ウィンドウがないことです。問題はどこだ?

[編集1]

メソッド呼び出しを次のように変更しました。

  <script>
    function pressButton()
    {
       myNameSpace.myClass.myMethod1(succeededCallBack1);

       function succeededCallBack1(strResponse1)
       {
          //some operation with strResponse1
          myNameSpace.myClass.myMethod2(s, p, x, y, succeededCallBack2());

          function succeededCallBack2(strResponse2)
          {
             alert(strResponse2);
          }
       }
    }
    </script>

succeededCallBack2これでアラート ウィンドウが表示され、スクリプト内で関数が呼び出されていることがわかります。問題は、アラート ウィンドウにundefined値が表示されることです。が設定されていないことを意味しstrResponse2ます。ブレーク ポイントを挿入しmyMethod2て正しく実行されるかどうかを確認すると、ブレーク ポイントmyMethod2がヒットする前に警告ウィンドウが表示されます。いったいどうやってそれが可能になるのでしょうか?

4

2 に答える 2

0

最初の関数内に 2 番目の関数を記述しました。以下のように修正します。

<script type='text/javascript' language='javascript'>
  myNameSpace.myClass.myMethod1(succeededCallBack1);
  function succeededCallBack1(strResponse1)
  {
     //some operation with strResponse
     myNameSpace.myClass.myMethod2(s, p, x, y, succeededCallBack2);   
  }
  function succeededCallBack2(strResponse2)
  {
     alert(strResponse2);
  }
</script>
于 2013-09-08T06:02:42.413 に答える