我试图从JSON调用简单的Web方法,但我收到错误。
在Chrome中:
SyntaxError:意外标记<
在Firefox中:
SyntaxError:JSON.parse
Javascript代码:
$(document).ready(function() {
$('#<%=ddlTest.ClientID %>').change(function() {
var value = $('#<%=ddlTest.ClientID %>').val();
var req = $.ajax({
type: "POST",
url: "Test.aspx/getTest",
data: "{Id: '" + value + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data) {
$(alert(data.d))
},
error: function(XMLHttpRequest, text, error) { alert(error); },
failure: function(response) {
alert(response.d);
}
})
});
});
.aspx
代码:
<asp:DropDownList ID="ddlTest" AutoPostBack="false" runat="server">
<asp:ListItem Value="0" Text="zero" />
<asp:ListItem Value="1" Text="One" />
<asp:ListItem Value="2" Text="Two" />
</asp:DropDownList>
<asp:Label ID="lblTest" runat="server" Text="hiii"/>
的WebMethod:
[WebMethod]
public static string getTest(string id)
{
return id;
}
请指导我......
答案 0 :(得分:0)
如果您看一下像Firebug这样的对AJAX请求的响应,您会看到正在返回HTML标记而不是JSON。
那是因为你的data
参数不太合适。因此,您所做的请求与任何可用的页面方法都不匹配,最终会像对ASPX页面本身的常规请求一样处理。
由于HTML文档的第一个字符是JSON文档的无效第一个字符,因此JSON解析器无法正确解析它。
要解决此问题,请更改data
参数,如下所示:
// Parameters to page methods are case sensitive. Id != id.
//
// Parameter names need to be quoted. ASP.NET will allow for both double and
// single quotes, but technically only double quotes are valid JSON.
data: '{"id": "' + value + '"}",
在客户端手动构建JSON字符串很快就会变得混乱。您可能对using JSON.stringify to clean that process up a bit感兴趣。
答案 1 :(得分:0)
我找到了解决问题的方法。 我刚加了傻瓜。在我的web.config文件中排队,现在工作正常。
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>
答案 2 :(得分:-1)
删除'return id';
相反,您必须序列化对JSON的响应并执行响应写入
using System.Text;
using System.Runtime.Serialization.Json;
using System.IO;
...
public static string ToJSON(this object obj)
{
string json = string.Empty;
DataContractJsonSerializer ser = new DataContractJsonSerializer(obj.GetType());
using ( MemoryStream ms = new MemoryStream() )
{
ser.WriteObject(ms, obj);
json = Encoding.Default.GetString(ms.ToArray());
}
return json;
}
...
HttpContext.Current.Response.Write(ToJSON(id));