为什么我的ajax调用不能到达我的.NET WebMethod?

时间:2015-12-09 15:28:57

标签: javascript c# ajax

我不能为我的生活理解为什么这段代码不起作用。我需要第二眼来审查它 - TIA:

此函数返回成功,但不调用C#方法。

的JavaScript

$(function() {
    ($("#survey").on("submit", function() {
        var data = serializeForm();
        $.ajax({
            type: "POST",
            url: "Default.aspx/SaveSurveyInfo",
            data: data,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(data) {
                alert('ok');
            },
            error: function(data) {
                alert('failed');
            }
        }); //ajax

        return false;
    }));

    function serializeForm() {

        var data = new Object;

        $("#survey input[type='checkbox']").each(

        function(index) {
            data[$(this).get(0).id] = $(this).get(0).checked ? 1 : 0;
        });
        data.otherEnviron = $("#survey input[type='text']").val();
        var strData = JSON.stringify(data);
        return strData;
    }
});

修订:

    $(function () {
        ($("#survey").on("submit", function() {
            var data = serializeForm();
            alert(data);
            $.ajax({
                type: "POST",
                url: "Default.aspx/SaveSurveyInfo",
                data: data,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data) {
                    alert('ok-'+ data);
                },
                error: function (xml, textStatus, errorThrown) {
                    alert(xml.status + "||" + xml.responseText);
                }
            }); //ajax

            return false;
        }));

注意:

strData="{\"ms\":1,\"google\":0,\"PHP\":0,\"otherEnviron\":\".NET\"}"

C#WebMethod

[WebMethod]
private void SaveSurveyInfo(int ms, int google, int PHP, string otherEnviron)
{
    using (SqlConnection scon = new SqlConnection(connectionString))
    {
        scon.Open();
        SqlCommand scmd = scon.CreateCommand();
        scmd.CommandType = System.Data.CommandType.StoredProcedure;
        scmd.CommandText = "SurveyResults";
        scmd.Parameters.AddWithValue("MicrosoftTranslator", ms);
        scmd.Parameters.AddWithValue("GoogleTranslator", google);
        scmd.Parameters.AddWithValue("PHPOkay", PHP);
        scmd.Parameters.AddWithValue("other", otherEnviron);
        scmd.ExecuteNonQuery();
    }
}

修订C#

[WebMethod]
public static void SaveSurveyInfo(int ms, int google, int PHP, string otherEnviron)
{
    try
    {
        using (SqlConnection scon = new SqlConnection(ConfigurationManager.ConnectionStrings["C287577_NorthwindConnectionString"].ConnectionString))
        {
            scon.Open();
            SqlCommand scmd = scon.CreateCommand();
            scmd.CommandType = System.Data.CommandType.StoredProcedure;
            scmd.CommandText = "SurveyResults";
            scmd.Parameters.AddWithValue("MicrosoftTranslator", ms);
            scmd.Parameters.AddWithValue("GoogleTranslator", google);
            scmd.Parameters.AddWithValue("PHPOkay", PHP);
            scmd.Parameters.AddWithValue("other", otherEnviron);
            scmd.ExecuteNonQuery();
            scmd.Dispose();
        }

    } catch(Exception ex)
    {
        throw new Exception(ex.Message);
    }
}

这仍然无效。没有错误消息显示,只有确定。

2 个答案:

答案 0 :(得分:2)

因为WebMethod必须是公共的和静态的

类似的问题:ASP.NET jQuery error: Unknown Web Method

如果您需要更多关于ajax调用的安全性,请尝试将其移至Web服务。

答案 1 :(得分:2)

public static void SaveSurveyInfo

该方法在aspx页面中应该是静态的和公共的。

在asmx中它可以是公开的。