$("#dialog").dialog({
    title: "修改密码",
    autoOpen: false,
    resizable: false,
    modal: true,
    buttons: {
        "确定": function() {
            // 校验输入项
            if (!valDialog(this))
                return;            var sOldPassword = $("#txtOldPassword").val();
            var sNewPassword = $("#txtNewPassword").val();
            $.ajax({
                type: "post",
                contentType: "application/json;charset=utf-8",
                url: "WP000002.aspx/ModifyPassword",
                data: "{sOldPassword:'" + sOldPassword + "', sNewPassword:'" + sNewPassword + "'}",
                dataType: "json",
                success: function(result) {
                    alert(result.d); //这里没执行
                    if (result.d == "") {
                        $(this).dialog("close");
                        alert("密码修改成功");
                    }
                    else {
                        alert(result.d);
                    }
                },
                error: function(result, status) { //如果没有上面的捕获出错会执行这里的回调函数    
                    alert(status); //这里也没执行
                }
            });
        },
        "取消": function() {
            $(this).dialog("close");
        }
    }
});
代码如上,就是很简单实现一个修改密码的功能。为什么点击“确定”按钮后通过ajax调用后台函数无效呢?

解决方案 »

  1.   

    ModifyPassword 这个方法执行了么?
      

  2.   

     dataType: "json",=>dataType:"text",
    然后你alert(result)试试
      

  3.   

    在ajax里加一句 beforeSend:function(){
     alert(data);
    }
    看看 你传的数据对么?
    要么 你要请求的那个方法地址不匹配
      

  4.   


    很奇怪,alert也出不来
    另外后台代码也贴出来,应该没问题的。[WebMethod]
    public static string ModifyPassword(string sOldPassword, string sNewPassword)
    {
        if (Utility.MD5Parse(sOldPassword) != Operator.Password)
        {
            return "原密码校验失败!";
        }    string sReturn = string.Empty;
        Hashtable ParamsIn = new Hashtable();
        ParamsIn.Add("@operator_no", Operator.OperatorNo);
        ParamsIn.Add("@password", sNewPassword);    Request sRequest = new Request();
        sRequest.FunctionId = 100002;
        sRequest.Params = Serializer.Serialize(ParamsIn);    try
        {
            Service.Execute(sRequest);
        }
        catch (Exception ex)
        {
            sReturn = Utility.ErrorParse(ex);
        }    return sReturn;
    }
      

  5.   

    data: "{'sOldPassword':'" + sOldPassword + "', 'sNewPassword':'" + sNewPassword + "'}",
      

  6.   

    把contentType 改成 application/x-www-form-urlencoded;charset=utf-8
      

  7.   

    data:{sOldPassword :sOldPassword ,sNewPassword :sNewPassword }这样写
      

  8.   

    你前边传的是个JSON形式 后台那里 能接收到么?不会C# 呵呵
      

  9.   

    我把js的变量名改了下
    data: { sOldPassword: sOld, sNewPassword: sOld },
    不管加不加引号也都不行,感觉应该出在其他地方
      

  10.   

    页面上还有另外一个ajax就是正常的,区别就是正常的那个直接在页面上,这个有问题就是用了jqueryui dialog
      

  11.   

     $.ajax({
                    type: "post",
                    url: "WP000002.aspx/ModifyPassword",
                    data: {sOldPassword:'" + sOldPassword + "', sNewPassword:'" + sNewPassword + "'},
                    dataType: "json",
                    success: function(result) {
                        alert(result.d); //这里没执行
                        if (result.d == "") {
                            $(this).dialog("close");
                            alert("密码修改成功");
                        }
                        else {
                            alert(result.d);
                        }
                    },
                    error: function(result, status) { //如果没有上面的捕获出错会执行这里的回调函数    
                        alert(status); //这里也没执行
                    }
                });
      

  12.   

    ajax请求之前的那两个数据 能得到么?
      

  13.   


    <!-- 修改密码对话框 -->
    <div id="dialog">
        <table class="onecolumn">
            <tr>
                <td class="caption">
                    原密码
                </td>
                <td class="content">
                    <input type="password" id="txtOldPassword" class="textbox" reg="^.{1,}$" tip="请输入原密码,必填" />
                </td>
            </tr>
            <tr>
                <td class="caption">
                    新密码
                </td>
                <td class="content">
                    <input type="password" id="txtNewPassword" class="textbox" reg="^.{1,}$" tip="新密码必填" />
                </td>
            </tr>
            <tr>
                <td class="caption">
                    确认新密码
                </td>
                <td class="content">
                    <input type="password" id="txtNewPasswordAgain" class="textbox" reg="^.{1,}$"" "
                        tip="再次输入新密码,确认两次输入相同" />
                </td>
            </tr>
            <!-- 测试用 -->
            <tr>
                <td>
                    <input type="button" value="测试" onclick="Modify();" />
                </td>
            </tr>
        </table>
    </div>function Modify() {
        var sOld = $("#txtOldPassword").val();
        var sNew = $("#txtNewPassword").val();
        $.ajax({
            type: "post",
            contentType: "application/json",
            url: "WP000002.aspx/ModifyPassword",
            data: "{ sOldPassword: '" + sOld + "', sNewPassword: '" + sOld + "' }",
            dataType: "json",
            success: function(result) {
                alert(result.d);
                if (result.d == "") {
                    $(this).dialog("close");
                    alert("密码修改成功");
                }
                else {
                    alert(result.d);
                }
            },
            error: function(result, status) { //如果没有上面的捕获出错会执行这里的回调函数    
                alert(status);
            }
        });
    }
    我加了个测试的按钮,点击这个就是正常的,点击dialog生成的按钮就不行
      

  14.   

    那你看看 是不是在
    if (!valDialog(this))
                    return;
    这一句给返回了
      

  15.   

    那在生成那个按钮内的第一句话就alert(this)能得到东西吗
      

  16.   

    啊,谢谢两位了。一直在ajax调用那里纠结,原来valDialog()一直返回false了。真是非常感谢。