2012-01-23 1 views
5

Я пытаюсь обслуживать запросы AJAX с помощью метода на моей странице .aspx. По какой-то причине я не получаю возвращенные данные, которые я хочу. Может ли кто-нибудь сказать мне, что я делаю неправильно?Служба AJAX запросов с webmethod на странице ASPX

mypage.aspx:

<%@ Page Language="VB" Title="My Page" %> 
<%@ Import Namespace="System.Web.Services" %> 
<%@ Import Namespace="System.Collections.Generic" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<script runat="server"> 

    Protected Sub Page_Load(sender As Object, e As System.EventArgs) 

    End Sub 

    <WebMethod()> Public Function testmethod() As Integer 
     Return 5 
    End Function 

</script> 

<html> 
<!--...rest of page including mybutton and myresults--> 

JQuery:

$("#mybutton").click(function() { 
    $.ajax({ 
     type: "POST", 
     url: "mypage.aspx/testmethod", 
     data: "{}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(msg) { 
     alert("success"); 
     $("#myresults").html(msg.d); 
     }, 
     error: function(msg) { 
     alert("error:" + JSON.stringify(msg)); 
     } 
    }); 
}); 

Когда я нажимаю mybutton я получаю предупреждение "ошибка:", а затем весь много HTML, который говорит:

Unknown web method testmethod. 
Parameter name: methodName 

ответ

12

Метод должен быть Shared:

<WebMethod()> Public Shared Function testmethod() As Integer 
    Return 5 
End Function 

Кроме того, я не уверен, что методы страниц поддерживаются, когда вы не используете файл кода.

+0

Спасибо, это решило проблему. – Flash

+2

Чтобы добавить - В C# - это должно быть 'static' – Lijo

0

Какая ошибка возвращается? Причина, по которой вы видите всю страницу html, состоит в том, что у вас есть ошибка в коде, а msg, который передается обратно, - это полный html, который сообщает вам, где ошибка. Я уверен, что если вы исправите ошибку, тогда все будет в порядке.

Я не уверен, если вы ожидаете увидеть сообщение об ошибке из кода. Помните - функции успеха или ошибки, вызываемые в разделе Ajax, вызываются в зависимости от того, был ли метод webservice вызван успешно или нет. Я думаю, вы думаете, что здесь увидите сообщение об ошибке из webmethod, но на самом деле, если веб-метод выбрасывает ошибку, вы все равно будете иметь успешный вызов ajax, и, таким образом, функция «успех» будет работать. Функция «error» будет выполняться только при сбое вызова всего веб-метода, поэтому на сервере не будет ответа.

Надеюсь, что имеет смысл.

+0

Спасибо, что понял это после того, как я разместил сообщение, я включил сообщение об ошибке в нижней части вопроса. – Flash