2016-02-14 4 views
0

Во время работы с jQuery Ajax-методом я узнал, что метод может только вызвать вызов webmethod или get/post mvc. Почему я не могу вызвать обычную функцию с помощью метода ajax?почему jQuery метод ajax может только позвонить по webmethod

Пример:

$.ajax({ 
    type: "POST", 
    url: "CS.aspx/GetCurrentTime", 
    data: '{name: "' + $("#<%=txtUserName.ClientID%>")[0].value + '" }', 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: OnSuccess, 
    failure: function(response) { 
     alert(response.d); 
    } 
}); 

Предположим, я делаю вызов метода GetCurrentTime() из CS.aspx страницы, то мне нужно, чтобы украсить GetCurrentTime() с атрибутом WebMethod, чтобы сделать вызов из метода ajax.

+0

Ваш вопрос не ясен для меня, вы хотите отправить данные, используя другие методы? – M98

+0

@ Kermani, пожалуйста, проверьте сейчас, я включил пример и, пожалуйста, дайте мне знать, если его еще неясно. – HarshSharma

+0

Вы спрашиваете о проблемах с кодом сервера и показывается только код на стороне клиента. Вопрос совершенно неясен. Также не знаю, что означает * «вызвать нормальную функцию» *. Также обратите внимание, что в '$ .ajax' нет свойства' failure' ... см. Документы – charlietfl

ответ

1

Что вы ожидаете от поведения. Проблема не связана с jQuery, а скорее с серверным кодом.

Обычно вы запрашиваете ресурс через свой URL-адрес для получения этого ресурса.

CS.aspx - это URL-адрес, указывающий на эту страницу.

Использование CS.aspx/GetCurrentTime На самом деле это другой URL-адрес с запросом на другой ресурс.

И вот здесь приходит WebMethodAttribute. Он сообщает ASP.NET, что новый ресурс доступен через URL-адрес CS.aspx/GetCurrentTime, и таким образом среда выполнения ASP.NET знает, что делать, когда запрос сделан для этого URL-адреса.

В качестве примечания стороны: ASP.NET MVC не использует .aspx в своих URL (по умолчанию не по умолчанию). Лучше проверьте свои настройки и получите свои вещи прямо.

EDIT: Если вы используете MVC, вы должны быть в контроллере (а не на странице), и вы будете писать действия (а не методы). И в этом случае нет необходимости использовать атрибут WebMethodAttribute, потому что по умолчанию все публичные действия доступны через URL-адреса, настроенные в RouteConfig.

маршрут по умолчанию это:

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

Надеется, что это помогает очищая ваши вопросы.