SyntaxError:JSON.parse

时间:2011-11-28 11:04:54

标签: c# asp.net jquery webmethod

我试图从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;
}

请指导我......

3 个答案:

答案 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));