2012-01-23 28 views
5

Tôi đang cố gắng phục vụ các yêu cầu AJAX với một phương thức trong trang .aspx của tôi. Đối với một số lý do tôi không nhận được dữ liệu trả về mà tôi muốn. Ai có thể cho tôi biết tôi đang làm gì sai?Yêu cầu dịch vụ AJAX với webmethod trong trang 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)); 
     } 
    }); 
}); 

Khi tôi bấm mybutton tôi nhận được một cảnh báo "lỗi:" và sau đó toàn bộ rất nhiều HTML mà nói:

Unknown web method testmethod. 
Parameter name: methodName 

Trả lời

12

Phương pháp này cần phải được Shared:

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

Ngoài ra, tôi không chắc chắn rằng phương pháp trang được hỗ trợ khi bạn không sử dụng một code-behind file.

+0

Cảm ơn, điều này đã giải quyết được vấn đề. – Flash

+2

Để thêm - Trong C# - nó cần phải là 'tĩnh' – Lijo

0

Lỗi đang được truyền lại là gì ?? Lý do bạn nhìn thấy toàn bộ trang html là bởi vì bạn có một lỗi trong mã và msg được truyền lại là html đầy đủ cho bạn biết lỗi ở đâu. Tôi chắc chắn nếu bạn sửa lỗi thì bạn sẽ ổn thôi.

Tôi không chắc chắn nếu bạn đang mong đợi để xem thông báo lỗi từ codebehind. Hãy nhớ - các hàm thành công hoặc lỗi được gọi trong phần Ajax được gọi tùy thuộc vào việc phương thức webservice có được gọi là thành công hay không. Tôi nghĩ rằng bạn đang nghĩ rằng bạn sẽ thấy thông báo lỗi từ webmethod teh ở đây, nhưng trong thực tế, nếu webmethod là ném lỗi sau đó bạn vẫn sẽ có một cuộc gọi ajax thành công và do đó chức năng "thành công" sẽ là một trong những hoạt động. Chức năng "lỗi" sẽ chỉ chạy khi toàn bộ cuộc gọi webmethod thất bại, do đó không có phản hồi từ máy chủ.

Hy vọng điều đó có ý nghĩa.

+0

Cảm ơn tôi đã nhận ra điều này sau khi đăng, tôi đã bao gồm thông báo lỗi ở cuối câu hỏi. – Flash