代码之家  ›  专栏  ›  技术社区  ›  newbie

使用Ajax Jquery和asmx服务按Id获取数据

  •  1
  • newbie  · 技术社区  · 7 年前

    我想按Id获取所选员工数据,这样会弹出一个模式并显示此Id的数据。Id会作为参数进行解析,但asmx服务最终不会启动。 以下是客户端代码:

     function getEmployeebyID(Id) {
            $("#ModalTitle").html("Update Employee");
            $("#MyModal").modal();
            var Id = Id;
    
            $.ajax({
                url: "EmployeeService.asmx/GetEmployeeById",
                type: "GET",              
    
                dataType: "json",
                data: { Id: Id },
                success: function (data) {
    
    
                    $('#txtFirstName').val(data[0].FirstName);
                    $('#txtLastName').val(data[0].LastName);
                    $('#txtGender').val(data[0].Gender);
                    $('#txtJobTitle').val(data[0].JobTitle);
                    $('#txtSalary').val(data[0].Salary);
                    $('#txtHireDate').val(data[0].HireDate);
    
    
                },
                error: function (errormessage) {
                    alert(errormessage.responseText);
                }
            });
            return false;
        }
    

    以下是服务器端代码:

    [WebMethod]
    
        public void GetEmployeeById(int Id)  
        {
            Employee employee = new Employee();
    
            string cs = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
            using (SqlConnection con = new SqlConnection(cs))
            {
                SqlCommand cmd = new SqlCommand("spGetEmployeeById", con);
                cmd.CommandType = CommandType.StoredProcedure;
    
                SqlParameter parameter = new SqlParameter();
                parameter.ParameterName = "@Id";
                parameter.Value = Id;
    
                cmd.Parameters.Add(parameter);
                con.Open();
                SqlDataReader rdr = cmd.ExecuteReader();
                while (rdr.Read())
                {
                    employee.Id = Convert.ToInt32(rdr["Id"]);
                    employee.FirstName = rdr["FirstName"].ToString();
                    employee.LastName = rdr["LastName"].ToString();
                    employee.Gender = rdr["Gender"].ToString();
                    employee.JobTitle = rdr["JobTitle"].ToString();
                    employee.Salary = Convert.ToInt32(rdr["Salary"]);
                    employee.HireDate = Convert.ToDateTime(rdr["HireDate"]);
                }
            }
    
            JavaScriptSerializer js = new JavaScriptSerializer();
            Context.Response.Write(js.Serialize(employee));
        }
    

    当我在运行数据时调用数据时,服务器端代码正在工作,因此问题出在客户端,并引发以下问题:对于意外以/GetEmployeeById结尾的url,请求格式无法识别 就我检查的元素而言,我看到了这个错误:localhost:50791/Services/EmployeeService。asmx/GetEmployeeById?Id=42 500(内部服务器错误)。不知道发生了什么。。。

    2 回复  |  直到 7 年前
        1
  •  1
  •   M.Nabeel    7 年前

    试试这个

     function getEmployeebyID(Id) {
            $("#ModalTitle").html("Update Employee");
            $("#MyModal").modal();
        var Emp={
        Id = Id
        }
            $.ajax({
                url: "../EmployeeService.asmx/GetEmployeeById",
                type: "POST",              
                contentType : "application/json; charset=utf-8",     
                dataType: "json",
                data: JSON.stringify(Emp),
                success: function (data) {
    
    
                    $('#txtFirstName').val(data[0].FirstName);
                    $('#txtLastName').val(data[0].LastName);
                    $('#txtGender').val(data[0].Gender);
                    $('#txtJobTitle').val(data[0].JobTitle);
                    $('#txtSalary').val(data[0].Salary);
                    $('#txtHireDate').val(data[0].HireDate);
    
    
                },
                error: function (errormessage) {
                    alert(errormessage.responseText);
                }
            });
            return false;
        }
    
        2
  •  1
  •   newbie    7 年前

    最后从这个 How do I fix a "Request format is unrecognized for URL..." error in a web service running in IIS? 我在网络上添加了。配置:

     <webServices>
      <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
      </protocols>
    </webServices>
    

    并从中删除

     $('#txtFirstName').val(data[0].FirstName);
    

    这个 [0] 一切都很顺利。