使用 JQuery 调用 WebMethod
我无法通过 JQuery 调用进入我的 Search WebMethod。 也许有人可以帮助我指出正确的方向。
我还将所有内容打包到一个 zip 文件中,以防有人想仔细查看。
http://www.filedropper.com/jsonexample
谢谢 Ryan
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>JSON Example</title>
<script type="text/javascript" language="JavaScript" src="jquery-1.3.1.min.js"></script>
<script type="text/javascript" language="javascript">
function Search() {
var search = $("#searchbox").val();
var options = {
type: "POST",
url: "Default.aspx/Search",
data: "{text:" + search + "}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
alert('Success!');
}
};
$.ajax(options);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<input type="text" id="searchbox" size="40" />
<a href="#" onclick="Search()" id="goSearch">Search</a>
<br />
<div id="Load" />
</form>
</body>
</html>
这是 default.aspx 背后的代码
Imports System.Data
Imports System.Web.Services
Imports System.Web.Script.Serialization
Partial Class _Default
Inherits System.Web.UI.Page
<WebMethod()> _
Public Shared Function Search(ByVal text As String) As IEnumerable
Return "test"
End Function
End Class
I am having trouble getting inside my Search WebMethod from my JQuery call.
Maybe someone could help to point me in the right direction.
I also packed up everything into a zip file incase someone wants to check it out for a closer look.
http://www.filedropper.com/jsonexample
Thanks
Ryan
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>JSON Example</title>
<script type="text/javascript" language="JavaScript" src="jquery-1.3.1.min.js"></script>
<script type="text/javascript" language="javascript">
function Search() {
var search = $("#searchbox").val();
var options = {
type: "POST",
url: "Default.aspx/Search",
data: "{text:" + search + "}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
alert('Success!');
}
};
$.ajax(options);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<input type="text" id="searchbox" size="40" />
<a href="#" onclick="Search()" id="goSearch">Search</a>
<br />
<div id="Load" />
</form>
</body>
</html>
And here is the code behind for the default.aspx
Imports System.Data
Imports System.Web.Services
Imports System.Web.Script.Serialization
Partial Class _Default
Inherits System.Web.UI.Page
<WebMethod()> _
Public Shared Function Search(ByVal text As String) As IEnumerable
Return "test"
End Function
End Class
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
要解决这样的问题,首先要做的是在 Firebug 中观察它。
如果您单击“搜索”链接并在 Firebug 控制台中观察 POST 请求/响应,您将看到它抛出 500 服务器错误:无效的 JSON 基元。
原因是“数据”JSON 文字中的键/值标识符没有被引用。 第 17 行应该是:
然后,一切都会按预期工作。
注意:建议的数据 { test: search } 将不起作用。 如果您向 jQuery 提供实际的 JSON 文字而不是字符串,它会将其转换为 test=search 的键/值对,并发布它而不是 JSON。 这还会导致 ASP.NET AJAX ScriptService 或 PageMethod 抛出 Invalid JSON Primitive 错误。
To solve a problem like this, the first thing to do is watch it in Firebug.
If you click the "Search" link and watch the POST request/response in Firebug's console, you'll see it's throwing a 500 server error: Invalid JSON Primitive.
The reason for that is because the key/value identifiers in your "data" JSON literal aren't quoted. Line 17 should be:
Then, all will work as expected.
Note: The suggested data { test: search } will not work. If you provide jQuery with an actual JSON literal instead of a string, it will convert that into a key/value pair of test=search and POST that instead of the JSON. That will also cause an ASP.NET AJAX ScriptService or PageMethod to throw the Invalid JSON Primitive error.
您需要执行以下操作 (C#):
public static
[WebMethod]
属性进行修饰EnablePageMethods="true"
这里是一些示例 javascript:
You need to do the following (C#):
public static
[WebMethod]
attributeEnablePageMethods="true"
And here is some sample javascript: