使用AJAX JSON调用ASP.NET WebMethod

时间:2014-06-06 23:08:16

标签: jquery asp.net ajax json vb.net

我使用VB.NET代码隐藏在ASP.NET中对一个新的Web应用程序进行原型设计,该代码隐藏使用JQuery的AJAX来调用WebMethod,但我不断得到parsererrors。这是我的标记:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="testpage.aspx.vb" Inherits="WorkOrder_testpage" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
    <link href="../jquery-ui-1.9.2.custom.min.css" rel="stylesheet" />
    <script src="../jquery-1.8.3.js"></script>
    <script src="../jquery-ui-1.9.2.custom.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $('#btnTest').click(function () {
                $.ajax({
                    type: 'POST',
                    contentType: 'application/json; charset=utf-8',
                    url: 'testpage.aspx/testFunction',
                    //data: {a:'hello'},
                    dataType: 'json',
                    success: function (data) {
                        $('#lblDebug').text(data);
                    },
                    error: function (jqXHR, textStatus, errorThrown) {
                        alert(textStatus + ": " + errorThrown);
                    }
                });
            });
            $('#btnTest').focus();
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
        <span id="lblDebug"></span><input type="button" id="btnTest" value="TEST" />
    </form>
</body>
</html>

我的代码隐藏:

Imports System.Web.Services
Imports System.Web.Script.Serialization
Partial Class WorkOrder_testpage
    Inherits System.Web.UI.Page
    <WebMethod()> _
    Public Shared Function testFunction() As String
        Dim jsonSer As New JavaScriptSerializer
        testFunction = jsonSer.Serialize("hello")
    End Function
End Class

我已经尝试过的事情:

  • 省略dataType和/或contentType。这导致HTML在成功时被传回
  • 使用&#34; data.d&#34;而不是&#34;数据&#34;在输出成功结果时。仅在省略dataType和/或contentType时才有效,没有显示数据。
  • 将httpModules元素添加到web.config。没有变化,但可能会有更多我在那里失踪。
  • 以几乎所有可想象的方式格式化我的返回数据。始终以parsererrror结尾。它总是说,&#34; SyntaxError:JSON.parse:JSON数据的第1行第1列的意外字符&#34;

在哪里我认为我错了:

我认为我还没有正确地格式化我的JSON,在这种情况下请注意我,或者有一些我不知道的配置阻止我的JSON通过。

我知道这与其他大约80个问题相似,但到目前为止我找不到任何问题似乎都有任何帮助。

我的帮助来源:
asp.net jquery ajax json: Simple example of exchanging data PageMethods, jQuery and JSON http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/ http://www.aspdotnet-suresh.com/2013/12/jquery-ajax-json-example-in-aspnet.html
还有更多。

2014年10月1日更新

我尝试了以下类似/相同结果的Mun的答案。如果有人使用相同的结构完成此操作,我想知道您必须在web.config文件中添加或配置多少(如果有)。

1 个答案:

答案 0 :(得分:1)

通过 PageMethods 而不是jQuery调用您的webmethod可能更容易。

代码背后(在C#中,但很容易转换为VB.NET):

[WebMethod]
public static string SayHello(string name)
{
    return "Hello " + name;
}

web窗体:

$("#btnTest").click(function() {
    PageMethods.SayHello("Test", function(result) {
      alert(result);  // Should show "Hello Test"
    });
});

SayHello 方法的Javascript代理将由脚本管理器自动创建,允许它被称为客户端。