【问题标题】:Calling web methods through jquery AJAX and nesting AJAX通过jquery AJAX调用web方法和嵌套AJAX
【发布时间】:2016-10-11 22:24:34
【问题描述】:

我在使用 jQuery ajax 更新 sql 数据库表时遇到问题。 这是我的场景。我正在研究权限表,以便为教师分配某种特权/权利来执行网站的某些必需功能。

1) 我调用一个 webmethod 并传递教师的 id 以使用 jQuery ajax 检索分配给该特定教师的所有权限 2) 在步骤 1 的成功函数中,我使用 jQuery ajax 调用另一个 Web 方法,并在针对列出的每个权限存在的复选框(打开/切换按钮 -- 它的输入类型是复选框)上绑定一个单击事件。 3)当我点击那个开/关切换复选框时,我想更新权限表中sql数据库表中的一行,如果它打开并且用户将其关闭,那么该特定权限将不分配给该教师。

这是我的代码

 public void UpdatePrivileges(string _columnName, byte _value, int _teacherid)
    {
        JavaScriptSerializer objserializer = new JavaScriptSerializer();
        myDatabase.CreateConnection();
        myDatabase.InitializeSQLCommandObject(myDatabase.GetCurrentConnection, "update tbl_privileges set " + _columnName + " = @val where teacher_id = @tid");
        myDatabase.obj_sqlcommand.Parameters.AddWithValue("@tid", _teacherid);
        myDatabase.obj_sqlcommand.Parameters.AddWithValue("@val", Convert.ToByte(_value));
        try
        {
            myDatabase.OpenConnection();
            myDatabase.obj_sqlcommand.ExecuteNonQuery();
        }
        finally
        {
            myDatabase.CloseConnection();
            myDatabase.obj_sqlcommand.Dispose();
        }
        HttpContext.Current.Response.Write(objserializer.Serialize("Updated"));
    }

此代码用于检索教师的权限并将其显示在 webForm 上。

   function GetTeacherPrivileges() {
        var teacherid = $('#<%=txtTeacherIDToPopulatePrivileges.ClientID%>').val();
        $.ajax({
            url: 'source/WebServices/GetAllTeachers.asmx/GetPrivileges',
            method: 'post',
            data: { _teacherID: teacherid},
            datatype: 'json',
            success: function (data) {
                var obj = JSON.stringify(data);
                var arrayjson = $.parseJSON(obj);
                var actualarray = $.parseJSON(arrayjson);
                $.each(actualarray, function (i, v) {
                    $('#tablebody').append('<tr class="table-row"> <td class="col-3"><span>Events</span></td><td class="col-2"><a href="#">is this teacher eligible to making events?</a></td><td class="col-3"><label class="switch centerbuttion "><input id="check_event" class="switch-input" type="checkbox" /><span class="switch-label" data-on="Yes" data-off="No"></span><span class="switch-handle"></span></label></td></tr><tr class="table-row">  <td class="col-3"><span>Attendance</span></td><td class="col-2"><a href="#">Do you want this teacher can mark attendance?</a></td><td class="col-3"><label class="switch centerbuttion "><input id="check_attendance" class="switch-input" type="checkbox" /><span class="switch-label" data-on="Yes" data-off="NO"></span><span class="switch-handle"></span></label></td></tr><tr class="table-row"><td class="col-3"><span>Homework</span></td><td class="col-2"><a href="#">Teacher will be able to upload homework with their respective classes.</a></td><td class="col-3"><label class="switch centerbuttion "><input id="check_homework" class="switch-input" type="checkbox" /><span class="switch-label" data-on="Yes" data-off="NO"></span><span class="switch-handle"></span></label></td></tr><tr class="table-row"><td class="col-3"><span>Reports</span></td><td class="col-2"><a href="#">Do you want this teacher to generate reports?</a></td><td class="col-3"><label class="switch centerbuttion "><input id="check_reports" class="switch-input" type="checkbox" /><span class="switch-label" data-on="Yes" data-off="NO"></span><span class="switch-handle"></span></label></td></tr><tr class="table-row"><td class="col-3"><span>Timetable</span></td><td class="col-2"><a href="#">Can this teacher make time table(s)?</a></td><td class="col-3"><label class="switch centerbuttion "><input id="check_timetable" class="switch-input" type="checkbox" /><span class="switch-label" data-on="Yes" data-off="NO"></span><span class="switch-handle"></span></label></td></tr><tr class="table-row"><td class="col-3"><span>Datesheet</span></td><td class="col-2"><a href="#">Can this teacher make Date Sheet(s)?</a></td><td class="col-3"><label class="switch centerbuttion "><input id="check_datesheets" class="switch-input" type="checkbox" /><span class="switch-label" data-on="Yes" data-off="NO"></span><span class="switch-handle"></span></label></td></tr>');
                    var event = v.Event;
                    var attendance = v.Attendance;
                    var homework = v.Homework;
                    var reports = v.Reports;
                    var timetable = v.TimeTable;
                    var datesheet = v.DateSheet;
                    if (event == 1) {
                        $('#check_event').trigger('click');
                    }
                    if (attendance == 1) {
                        $('#check_attendence').trigger('click');
                    }
                    if (homework == 1) {
                        $('#check_homework').trigger('click');
                    }
                    if (reports == 1) {
                        $('#check_reports').trigger('click');
                    }
                    if (timetable == 1) {
                        $('#check_timetable').trigger('click');
                    }
                    if (datesheet == 1) {
                        $('#check_datesheets').trigger('click');
                    }
                    $('#check_event').bind({
                        click: function () {
                            var privilegevalue = columnvalue('#check_event');
                            UpdatePrivilege('event', privilegevalue);
                        }
                    });
                });
            },
            error: function (error) {
                alert("Error: " + error);
            }
        });

这是我在上述AJAX的成功函数中调用的第二个AJAX代码,用于绑定点击事件。

function UpdatePrivilege(column,value) {
        var teacherid = $('#<%=txtTeacherIDToPopulatePrivileges.ClientID%>').val();
        $.ajax({
            url: 'source/WebServices/GetAllTeachers.asmx/UpdatePrivileges',
            data: { _columnName: "'"+column+"'" , _value: value , _teacherid:teacherid },
            dataType: 'json',
            dataContent: 'application/json; charset=utf-8',
            success: function (data) {
                alert('privilege updated'+data);
            },
            error: function(data) {
                alert('Error in updating privilege' + data);
            }
        });
    }

当我运行我的 aspx 页面并将教师的 id 输入到 GetAllTeachers() 函数时,一切正常,它将复选框上的单击事件与事件特权绑定,但是当我单击它时,它给了我来自 UpdatePrivilege() 函数的 AJAX 函数的错误.

【问题讨论】:

  • 能否提供错误信息?
  • console.log(data) 放入ajax UpdatePrivilege 函数的错误函数中,这样您就可以看到错误是什么,并更具体地了解您正在处理的情况。
  • 它返回 [object object] 并在更新权限时出现错误消息
  • @JahanAhmedAbbasi 是的,它正在返回 [object object],因为作为错误返回给您的“数据”实际上是一个对象,警报无法显示。您应该使用 console.log(data) 并找到 ajax 功能失败的实际原因。
  • 是的,我做到了,这是我在控制台窗口请求格式中看到的错误,因为 url 意外以 /UpdatePrivilege 结尾。

标签: c# jquery asp.net sql-server ajax


【解决方案1】:

如果您想发送 json,您需要自己对数据进行字符串化。你也不需要额外的引号包裹"'"+column+"'"

试试:

function UpdatePrivilege(column,value) {
    // I assume you are running this within Razor context and not in a javascript file
    var teacherid = $('#<%=txtTeacherIDToPopulatePrivileges.ClientID%>').val();

     // create data object
     var dataObj={ _columnName: column , _value: value , _teacherid:teacherid };
     // stringify it
     var postData = JSON.stringify(dataObj);

     $.ajax({
        url: 'source/WebServices/GetAllTeachers.asmx/UpdatePrivileges',
        data: postData ,// stringified data
        dataType: 'json',
        contentType: 'application/json; charset=utf-8',
        success: function (data) {
            console.log('privilege updated', data);
        },
        error: function(data) {
            console.log('Error in updating privilege' , data);
        }
    });
}

【讨论】:

  • “没有工作” 是毫无意义的。检查浏览器开发工具网络中的实际请求并检查状态以及发送/返回的内容。您似乎没有从服务器发送 json,但您正在请求它
  • 我以前这样做过,因此我说它不起作用。我将错误放在 console.log() 中,我在控制台窗口中看到的错误是请求格式无法识别,因为 url 意外以 /UpdatePrivilege 结尾
  • 这时需要调试服务器端。发送的数据在开发工具网络中是否符合预期?
  • 我将 datacontent 错误地设置为 contentType,这是我重新输入正确单词 (contentType) 的问题,它工作正常,感谢您的帮助,我非常感谢 :) 非常感谢
  • 啊是的...我看了一眼,没注意到
猜你喜欢
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
  • 2012-01-24
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多