SyntaxError:在 asp.net 中的 ajax 调用中位置 4 的 JSON 中的意外令牌 <

Posted

技术标签:

【中文标题】SyntaxError:在 asp.net 中的 ajax 调用中位置 4 的 JSON 中的意外令牌 <【英文标题】:SyntaxError: Unexpected token < in JSON at position 4 in ajax call in asp.net 【发布时间】:2019-09-22 00:21:08 【问题描述】:

我正在使用 ajax 调用使用 asp.net Web 表单绑定下拉索引更改事件的数据 遵循我的 Ajax 代码

var e = document.getElementById("<%=ddlEducation.ClientID%>");
                var value = e.options[e.selectedIndex].value;
                var text = e.options[e.selectedIndex].text;
                if (value == "0") 
                    $('#dvRecords').empty();
                    alert("Please Select Education");
                    return false;
                

                var obj =  "iEduid": value;
                var myJSON = JSON.stringify(obj);
                //Filling Grid View  
                $.ajax(
                    type: 'POST',
                    contentType: "application/json; charset=utf-8",
                    url: 'EditProfile.aspx/BINDEducationDATA',
                    data: myJSON,
                    dataType: 'JSON',
                    success: function (response) 
                        document.getElementById("ctl00_ContentPlaceHolder2_lblstram").value = response.d[i].eduStream
                        document.getElementById("ctl00_ContentPlaceHolder2_lbldescs").value = response.d[i].Edu_Description
                    ,
                    error: function (xhr, status, error) 
                        console.log(xhr);
                        alert(status);
                        alert(error);
                    
                );

当它执行时我得到第一个错误是 parsererror 接下来我得到错误说 Unexpected token

以上是我的 C# 代码

 [WebMethod]
    public static List<EduDesc> BINDEducationDATA(string iEduid)
    
        List<EduDesc> details = new List<EduDesc>();
        DataTable dtManager = new DataTable();

        using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["constr"].ConnectionString))
        
            SqlCommand cmd = new SqlCommand();
            SqlDataAdapter da = new SqlDataAdapter();
            cmd = new SqlCommand("Select Edu_Stream,Edu_Description from tbl_education WHERE ID='" + iEduid + "'", con);
            da.SelectCommand = cmd;
            da.Fill(dtManager);
        

        foreach (DataRow dtrow in dtManager.Rows)
        
            EduDesc logs = new EduDesc();
            logs.Edu_desc = (dtrow["Edu_Description"].ToString());
            logs.eduStream = dtrow["Edu_Stream"].ToString();
            details.Add(logs);
        
        return details;
    

任何帮助将不胜感激。

【问题讨论】:

JSON 本身是什么样的?该错误表明它不正确。 "iEduid":"35"" 这是我生成的 json 您需要创建一个模型来收集您的 json 数据到 web 方法,如 class Sample public string iEduid get;set;,然后在 web 方法中,您必须将参数更改为该模型,如 public static List&lt;EduDesc&gt; BINDEducationDATA(Sample model) ... 什么是正确的方法可以请你帮助 m=with it 这通常意味着出现错误并且网站返回 html 而不是 json。由于您的错误处理程序没有触发,因此还有 200 级状态代码。使用浏览器开发工具跟踪网络并查看响应。 【参考方案1】:

有几个方面值得关注。

foreach (DataRow dtrow in dtManager.Rows)

    EduDesc logs = new EduDesc();

    // - extra parentheses.
    // - here you use logs.Edu_desc but in 'success' (below) you use Edu_Description.
    logs.Edu_desc = (dtrow["Edu_Description"].ToString()); 

    logs.eduStream = dtrow["Edu_Stream"].ToString();
    details.Add(logs);



success: function (response) 
    // here you're looking for [i], but what is i? you need an integer.
    document.getElementById("ctl00_ContentPlaceHolder2_lblstram").value =
        response.d[i].eduStream
    document.getElementById("ctl00_ContentPlaceHolder2_lbldescs").value = 
        response.d[i].Edu_Description
,

在成功函数中,执行console.log(d) 来仔细检查结果。 hth。

【讨论】:

以上是关于SyntaxError:在 asp.net 中的 ajax 调用中位置 4 的 JSON 中的意外令牌 <的主要内容,如果未能解决你的问题,请参考以下文章

parserrror SyntaxError: Unexpected token < - 在 ASP.NET MVC 4 中使用 jQuery Ajax 加载部分视图

查询表达式中的语法错误(缺少运算符) - ASP.NET

在 Asp.NET 中返回“语法错误”的有效 SQL 语句

通过asp.net中的数据表在asp gridview中添加按钮列

如何在 ASP.Net 中的 asp:Button 中放置 Bootstrap Glyphicon?

有没有办法让 Asp.net 零公共站点(Asp.net MVC)中的实时登录用户?