わかりました、ここに私の問題があります:
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
がヒットする前に警告ウィンドウが表示されます。いったいどうやってそれが可能になるのでしょうか?