2013-05-02 2 views
2

Я новичок в jquery ajax.i хочу вызвать веб-сервис, но не работает. это мой код jquery.

$(document).ready(function() { 
      $('#TxBx_BasicSalary').focusout(function() { 
       var EmployeeId = $('#Hid_EmpID').val(); 

       $.ajax({ 
        type: "POST", 
        cache: false, 
        contentType: "application/json; charset=utf-8", 
        url: '/WebService/IncDedWebService.asmx/GetInceDed', 
        data: JSON.stringify({ id: EmployeeId }), 
        dataType: 'json', 
        success: function (data) { 
         alert("") 

        }, 
        error: function() { alert("error"); } 



       }); 

      }); 

это метод WebService.

[WebMethod] 
    [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] 
    public string GetInceDed(int id) 
    { 
     ClsSalary salary = new ClsSalary(); 
     //var abc salary=.GetIncDedByEmpId(id); 

     var serializer = new JavaScriptSerializer(); 
     var json = serializer.Serialize(salary.GetIncDedByEmpId(id)); 
     return json; 

    } 

Это не работает, когда я когда-либо вызываю. , пожалуйста, помогите мне. Что я сделал не так.

+0

Вы использовали инструменты разработчика в своем браузере (нажмите F12 в IE, Chrome или Firefox-with-FireBug), чтобы узнать, что запрашивается и возвращается? Вы вообще просмотрели детали ошибки? – Corey

+0

Не удалось загрузить ресурс: сервер ответил статусом 500 (Внутренняя ошибка сервера), я получил эту ошибку в веб-браузере. –

+0

Часто это из-за исключения, брошенного в ваш код. Попробуйте напрямую обратиться к URL-адресу веб-службы и посмотреть, есть ли у вас сообщение о трассировке исключения. Кроме того, попробуйте отладить веб-службу и поставить точку останова в начале метода GetInceDed. – Corey

ответ

4

Вы не отправил точное сообщение об ошибке, но есть несколько вещей, чтобы искать:

  1. Обратите внимание, что указанный вами POST в вашем $.ajax вызова, в то время как ваш ScriptMethod имеет UseHttpGet = true. Я предположил, что POST.

  2. Класс, содержащий Web/методы сценариев должны иметь [System.Web.Script.Services.ScriptService], чтобы быть отозваны из AJAX (в соответствии с комментарием добавленной asmx кодом шаблона)

Следующий код сервера работает для меня :

[WebService(Namespace = "http://YourNameSpaceGoesHere/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
[System.Web.Script.Services.ScriptService] 
public class IncDedWebService : System.Web.Services.WebService 
{ 
    [WebMethod] 
    [ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)] 
    public string GetInceDed(int id) 
    { 
     ClsSalary salary = new ClsSalary(); 
     //var abc salary=.GetIncDedByEmpId(id); 

     var serializer = new JavaScriptSerializer(); 
     var json = serializer.Serialize(new ClsSalary 
              { 
               Amount = 1234, 
               Id = 123, 
               Name = "Basic Salary" 
              }); 
     return json; 
    } 
} 

public class ClsSalary 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public decimal Amount { get; set; } 
} 

JSON возвращается:

{"d":"{\"Id\":123,\"Name\":\"Basic Salary\",\"Amount\":1234}"} 
1

попробовать эти изменения:

$(document).ready(function() { 
      $('#TxBx_BasicSalary').focusout(function() { 
       var EmployeeId = $('#Hid_EmpID').val(); 

      $.ajax({ 
       type: "POST", 
       cache: false, 
       contentType: "application/json; charset=utf-8", 
       url: '/WebService/IncDedWebService.asmx/GetInceDed', 
       data: '{ "id": "' + EmployeeId + '" }', //THIS LINE 
       dataType: 'json', 
       success: function (data) { 
        var emp = $.toJson(data.d); //THIS 
        alert(emp.IncDeb.EmpID); //AND THIS 

       }, 
       error: function() { alert("error"); } 



      }); 

     }); 

это метод WebService.

[WebMethod] 
    [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] 
    public string GetInceDed(int id) 
    { 
     ClsSalary salary = new ClsSalary(); 
     var abc salary=.GetIncDedByEmpId(id); 
     string json = "{\"IncDeb\":[\"EmpId\":\"" + abc.EmpId +"\"]"; //And you have to keep going with the other members 
     return json; 

    } 
+0

Ручная сборка строк JSON - это, как правило, плохая идея. Серийные классы и методы существуют по какой-то причине и хорошо работают в общем случае. – Corey

+0

Да, я знаю, но использование .Net работает только так, я несколько недель назад у меня была та же проблема, я пробовал каждый способ, который я нашел в Интернете, и ни те, кто работал –

Смежные вопросы