【问题标题】:Why doesn't my ajax call reach my .NET WebMethod?为什么我的 ajax 调用无法到达我的 .NET WebMethod?
【发布时间】:2015-12-09 15:28:56
【问题描述】:

我一生都无法理解为什么这段代码不起作用。我需要另一双眼睛来审查它 - 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);
    }
}

这仍然不起作用。没有显示错误信息,只有好的。

【问题讨论】:

  • 无关的,别忘了dispose scmd
  • 谢谢亚历克斯。进一步排查,成功方法显示“Authentication Failed”

标签: javascript c# ajax


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢。我尝试了您的建议,但仍然无法正常工作。也许我应该把它移到网络服务中。
【解决方案2】:
public static void SaveSurveyInfo

该方法应该是静态的,并且在要被点击的 aspx 页面中是公开的。

在 asmx 中它可以是公开的。

【讨论】:

  • 我按照您的建议声明了它,但它仍然无法正常工作。
  • @rontornambe 我建议从一些教程中做一个小例子,看看服务是否受到影响。之后为您构建它。一件遗漏的事情是属性 [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
猜你喜欢
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多