اگر از تماس سرویس وب Ajax در jQuery استفاده می کنید و اگر یک اشتباه نحوی یا تایپی کوچک مرتکب شوید، تعیین علت دقیق مشکل خسته کننده خواهد بود. حتی اگر در مرورگر اشکال زدایی کنید، پیام خطای دقیقی را نشان نمی دهد.
اما اگر در فراخوانی وب سرویس جی کوئری کد مدیریت استثنا را بنویسید، به راحتی می توانید مشکل دقیق کد خود را تعیین کنید.
در اینجا می توانیم مدیریت استثنا را به دو صورت پیاده سازی کنیم.
رویکرد 1:
- error: function (XMLHttpRequest, textStatus, errorThrown) {
- var err = eval("(" + XMLHttpRequest.responseText + ")");
- alert(err.Message)
- }
رویکرد 2:
- error: function (response) {
- var r = jQuery.parseJSON(response.responseText);
- alert("Message: " + r.Message);
- alert("StackTrace: " + r.StackTrace);
- }
کد jQuery کامل به صورت زیر خواهد بود:
- <script type="text/javascript">
- $(function () {
- $("#txtEmpName").autocomplete({
- source: function (request, response) {
- var param = { empName1: $('#txtEmpName').val() };
- $.ajax({
- url: "WebForm1.aspx/GetEmpNames",
- data: JSON.stringify(param),
- dataType: "json",
- type: "POST",
- contentType: "application/json; charset=utf-8",
- dataFilter: function (data) { return data; },
- success: function (data) {
- response($.map(data.d, function (item) {
- return {
- value: item
- }
- }))
- },
- //Approach 1
- error: function (XMLHttpRequest, textStatus, errorThrown) {
- var err = eval("(" + XMLHttpRequest.responseText + ")");
- alert(err.Message)
- }
- //Approach 2
- //error: function (response) {
- // var r = jQuery.parseJSON(response.responseText);
- // alert("Message: " + r.Message);
- // alert("StackTrace: " + r.StackTrace);
- //}
- });
- },
- minLength: 2 //This is the Char length of inputTextBox
- });
- });
- </script>
کد پشت فایل به این صورت است:
- [WebMethod]
- public static List<string> GetEmpNames(string empName)
- {
- List<string> Emp = new List<string>();
- string query = string.Format("SELECT EmpName FROM tblEmp WHERE EmpName LIKE '%{0}%'", empName);
- using (SqlConnection con = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=Test;Integrated Security=True"))
- {
- using (SqlCommand cmd = new SqlCommand(query, con))
- {
- con.Open();
- SqlDataReader reader = cmd.ExecuteReader();
- while (reader.Read())
- {
- Emp.Add(reader.GetString(0));
- }
- }
- }
- return Emp;
- }
توجه: اگر در کد بالا مشاهده کنید، پارامتر را به عنوان EmpName داده ام اما پارامتر را به عنوان empName1 برای ایجاد استثنا ارسال می کنم. حال اگر استثنای قبلی را مشاهده کردید، به راحتی می توانید آن را تجزیه و تحلیل کنید و مشکل دقیق را تعیین کنید.
اگر روش بهتری سراغ دارید به من بگویید.