【问题标题】:Problems with Jquery Script not hitting a WebMethodJquery 脚本没有命中 WebMethod 的问题
【发布时间】:2013-06-20 15:02:51
【问题描述】:

我有以下 JQuery 脚本:-

        <script type="text/javascript">
        $(document).ready(function () {
            $("#languageMenu").change(function () {
                var value = $("#languageMenu option:selected").val();
                setSession(value);
            });

            function setSession(val) {
                alert(val);

                $.ajax({
                    type: "POST",
                    url: "Dashboard.aspx/SetUserCulture",
                    data: JSON.stringify(val),
                    contentType: "application/json;charset=utf-8;",
                    success: function () {
                        __doPostBack('UPMainMenu', '');
                        __doPostBack('UPContent', '');
                    },
                    error: function () {
                        alert("Fail");
                    }
                });
            };

        });

    </script>

但是它总是抛出失败并且从不击中我的 WebMethod。我在 C# 中的 WebMethod 是:-

        [WebMethod(EnableSession = true)]
    public static void SetUserCulture(string lang)
    {
        HttpContext.Current.Session["CurrentUI"] = lang;
        String selectedLanguage = lang;

        Thread.CurrentThread.CurrentCulture =
            CultureInfo.CreateSpecificCulture(selectedLanguage);
        Thread.CurrentThread.CurrentUICulture = new
            CultureInfo(selectedLanguage);

    }

我似乎无法弄清楚为什么它没有命中我的 WebMethod。

非常感谢任何帮助!

感谢您的帮助和时间

******* 更新 * *************** **************

            $(document).ready(function () {


            $("#languageMenu").change(function () {
                var value = $("#languageMenu option:selected").val();
                setSession(value);
            });

            function setSession(lang) {
                alert(lang);
                $.ajax({
                    type: "POST",
                    url: "Dashboard.aspx/SetUserCulture",
                    dataType: "json",
                    data: "{'lang':'" + lang + "'}",
                    contentType: "application/json;charset=utf-8;",
                    success: function (data) {
                        alert(data);
                        __doPostBack('UPMainMenu', '');
                        __doPostBack('UPContent', '');
                    },
                    error: function (e) {
                        console.log(e);
                    }
                });
            };

        });

******第二次更新**********************

            $(document).ready(function () {


            $("#languageMenu").change(function () {
                var value = $("#languageMenu option:selected").val();
                setSession(value);
            });

            function setSession(lang) {
                alert(lang);
                $.ajax({
                    type: "POST",
                    url: "Dashboard.aspx/SetUserCulture",
                    data: "{'lang':'" + JSON.stringify(lang) + "'}",
                    contentType: "application/json;charset=utf-8;",
                    dataType: "json",
                    success: function() {
                        __doPostBack('UPMainMenu', '');
                        __doPostBack('UPContent', '');
                    },
                    error: function() {
                         alert("Fail");
                    }
                });

            };

        });

【问题讨论】:

    标签: c# jquery asp.net jquery-ui webmethod


    【解决方案1】:

    尝试像这样编写$.ajax 方法调用:

    function setSession(val) {
     $.ajax({
            type: "POST",
            url: "Default.aspx/SetUserCulture",
            data: "{'lang':'"+ val + "'}", // Note this portion
            contentType: "application/json;charset=utf-8;",
            success: function (data) {
            alert(data);
            __doPostBack('UPMainMenu', '');
            __doPostBack('UPContent', '');
           },
          error: function (e) {
             console.log(e);
          }
      });
    }
    

    因为您的web method 传递了lang 参数,所以在ajax 调用中您可能必须指定它。虽然有很多不同的方法可以做到这一点,但我想出了这个解决方案。 我尝试调用我的 web 方法,它成功了

    注意:

    如果它是像 {'lang':'hi'} 这样的有效 json 对象,那么 jQuery 可能不会将其作为 json 数据发送,而是将其序列化为 lang=hi,因此您会收到错误消息。 _以前根本没有通过。

    谢谢

    【讨论】:

    • 嘿 Dado 我仍然遇到这样的失败,并且断点永远不会命中
    • 试试error: function (e) {console.log(e);},因为我已经成功实现了这个目标。就在几分钟前。 :)
    • 然后检查控制台中的错误可能非常有用。
    • 试了一下,报错:function (e) {console.log(e);} 但什么也没发生,没有断点命中
    • @cinek 不行,给Cannot convert object of type \u0027System.String\u0027 to type \u0027System.Collections.Generic.IDictionary... bla bla bla
    【解决方案2】:

    ResolveUrl 会给你请求理解的 url

    var pageUrl = '<%= ResolveUrl("~/Default.aspx")%>';
    $(document).ready(function () {
    
        $("#languageMenu").change(function () {
            var value = $("#languageMenu option:selected").val();
            setSession(value);
        });
    
        setSession('testing');
    
        function setSession(lang) {
            alert(lang);
            $.ajax({
                type: "POST",
                url: pageUrl + "/SetUserCulture",
                data: "{'lang':'" + JSON.stringify(lang) + "'}",
                contentType: "application/json;charset=utf-8;",
                dataType: "json",
                success: function () {
                    alert('success');
                },
                error: function () {
                    alert("Fail");
                }
            });
    
        };
    
    });
    

    【讨论】:

    • 你的根文件夹中是“Default.aspx”吗?
    • 实际上是它的 Dashboard.aspx,是的,它在我的根目录中
    • Cinek 我会将您的答案标记为答案。我所做的是在我拥有的页面和另一个测试页面中尝试此代码。在测试页面中它起作用了,所以它与这段代码无关,但在托管页面上有一些其他的东西。感谢您的帮助!
    【解决方案3】:

    Dado 所说的——在 ajax 调用中必须指定参数名称。

    但是你传递的是一个简单的字符串,不需要 JSON - 跳过

    contentType: "application/json;charset=utf-8;",
    

    并使用

    contentType: "text/html",
    

    【讨论】:

      猜你喜欢
      • 2015-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多