使用jQuery调用webMethod返回HTML ... webMethod根本没有调用

时间:2012-06-25 18:05:56

标签: jquery visual-studio-2008 webmethod

我正在使用VisualStudio 2008并在ASPX页面上有一个方法,我试图使用jQuery调用javascript,如下所示。我刚刚收到页面的HTML。没有调用web方法。有趣的是,如果我更改了要在javascript中调用的webMethod的名称,我仍然会返回HTML。没有错误说无法找到webMethod。

我尝试将数据参数更改为“{'dummy':0}”,但这没有帮助。

我在新的VS 2010应用程序中使用了这个策略没有问题,但似乎无法让它在VS 2008中的现有应用程序上工作,我正在添加页面。 (尝试为旧应用程序添加一个扭曲)我已经看过firefox在firefox中告诉我什么,并且看起来都很正确。

非常感谢任何帮助。

C#WebMethod decalaration:

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

1 个答案:

答案 0 :(得分: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>