0

好的,这是我的问题:

我有两个 Web 服务方法,它们以 asmx 方式正确调用并返回一个字符串:

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

您已经在第一个函数中编写了第二个函数。更正如下。

<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 回答
0

试试下面

myNameSpace.myClass.myMethod2(s, p, x, y, function(res) {
       alert(res);
   });
于 2013-09-08T06:13:36.973 回答