0

私は VisualStudio 2008 を使用しており、以下に示すように、jQuery を使用して JavaScript で呼び出そうとする ASPX ページにメソッドがあります。ページの HTML を取得しています。Web メソッドは呼び出されません。興味深いことに、javascript で呼び出す webMethod の名前を変更しても、HTML が返されます。webMethod が見つからないというエラーではありません。

データ引数を "{ 'dummy':0 }" に変更しようとしましたが、それは役に立ちません。

新しい VS 2010 アプリでは問題なくこの戦略を使用しましたが、ページを追加している VS 2008 の既存のアプリでは機能しないようです。(古いアプリにひねりを加えようとしています)firebug が firefox で私に言っていることを調べましたが、すべてが正しいように見えます。

どんな助けでも大歓迎です。

C# WebMethod 宣言:

    [WebMethod()]
    public static string getQuestionnaires(int dummy)
    {
        System.Diagnostics.Debug.WriteLine("getQuestionnaires called");
        SqlCommand command = new SqlCommand();
        command.CommandText = "dbo.ws_GetPSQuestionnaire";
        command.CommandType = CommandType.StoredProcedure;
        DataTable dtQuestionnairesRaw = Utilities.ReturnDataSet(command).Tables[0];

        DataTable dtQuestionnaires = new DataTable();
        dtQuestionnaires.Columns.Add(new DataColumn("questionnaireID", typeof(int)));
        dtQuestionnaires.Columns.Add(new DataColumn("name"));

        foreach (DataRow dr in dtQuestionnairesRaw.Rows)
        {
            DataRow drNew = dtQuestionnaires.NewRow();
            drNew["questionnaireID"] = dr["questionnaireID"];
            drNew["name"] = Utilities.RemoveHTMLTags(dr["name"].ToString());
            dtQuestionnaires.Rows.Add(drNew);
        }
        dtQuestionnaires.AcceptChanges();

        return (JsonConvert.SerializeObject(dtQuestionnaires, Formatting.Indented));
    }

このjavascriptで呼び出しています。私のエラー関数は常に呼び出されます。

    $(document).ready(function() {
        var request = $.ajax({
            type: "POST",
            url: "/crs4/admin/editPSQuestionnaire.aspx/getQuestionnaires",
            contentType: "application/json; charset=utf-8",
            data: "{ 'dummy':'0' }",
            dataType: "json",
            success: populateQuestionnaires,
            error: AjaxFailed
        });
    });
4

1 に答える 1

1

構成を確認するために、これを非常に簡単にしましょう。

返す単純なクラスを作成します。

public class myReturn
{
    /// web service/webmethod needs 0 parameter constructor
    public myReturn()
    {
    }
    public myReturn(string returnValue)
    { 
        ReturnValue = returnValue;
    }
    public string ReturnValue;
}

クラスを使用する Web メソッドを宣言します。

[WebMethod()]      
public static myReturn getQuestionnaires(int dummy)      
{
   return new myReturn("howdy");
}

あれを呼べ:

//set up the ajax with error so we see what is going on.
// the following syntax requires jquery 1.5 or later for the
// converters used for asp.net
$.ajaxSetup({
    data: "{}",
    dataType: "json",
    type: "POST",
    contentType: "application/json",
    converters: {
        "json jsond": function(msg) {
            return msg.hasOwnProperty('d') ? msg.d : msg;
        }
    },
    error: function(xhr, textStatus, errorThrown) {
        var errorMessage = ("Ajax error - " + this.url + " | "
           + textStatus + " | " + errorThrown + " | " 
           + xhr.statusText + " | " + xhr.status);
        alert(errorMessage);
    }
});

var pString = '{"dummy":0}';
$.ajax({
    data: pString,
    url: "/crs4/admin/editPSQuestionnaire.aspx/getQuestionnaires",
    success: function(msg) {
        alert(msg);
    }
});

編集:Web構成でこれが必要になる場合があります:

<httpModules>
    <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>
于 2012-06-25T19:10:20.823 に答える