0

我正在使用 VisualStudio 2008 并在 ASPX 页面上有一个方法,我试图使用 jQuery 使用 javascript 调用,如下所示。我只是在获取页面的 HTML。不调用 web 方法。有趣的是,如果我将 webMethod 的名称更改为在 javascript 中调用,我仍然会取回 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;
}

声明您的网络方法以使用该类:

[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);
    }
});

编辑:您可能在网络配置中需要这个:

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