【问题标题】:syntax Error: Unxpected token < in JSON as position 0语法错误:位置 0 处的 JSON 中的意外标记 <
【发布时间】:2023-03-09 20:41:01
【问题描述】:

我在使用 ajax 获取数据时遇到问题。在我在本地进行测试期间,它完全返回了我想要的结果,但是当我使用 IIS 在服务器中发布项目时,它返回我的页面的 HTML 代码并出现错误“语法错误:JSON 中的意外令牌

下面是我的代码:

Controller: 
[HttpGet]
    public ActionResult getregion(string zname)
    {
        SelectList list = RegionList(zname);

        var serializedData = JsonConvert.SerializeObject(list, Formatting.Indented,
          new JsonSerializerSettings
          {
              ContractResolver = new CamelCasePropertyNamesContractResolver(),
              NullValueHandling = NullValueHandling.Ignore
          });

        return Json(list, JsonRequestBehavior.AllowGet);
    }

以上代码将返回 JSON 格式的区域列表。

public SelectList RegionList(string zname)
    {
        CustomerModel cust = new CustomerModel();
        List<SelectListItem> regionname = new List<SelectListItem>();
        try
        {

            dt1.Clear();
            MySqlConnection mycon = new MySqlConnection(conn.getconnections("mysql"));
            mycon.Open();
            if (zname == null || zname == "")
            {
                cmdsql = mycon.CreateCommand(); cmdsql.CommandText = "SELECT regionname FROM tbl_region WHERE STATUS=1 group by regionname order by regionname asc";
            }
            else
            {
                cmdsql = mycon.CreateCommand(); cmdsql.CommandText = string.Format("SELECT regionname FROM tbl_region WHERE STATUS=1 and zonecode='{0}'  group by regionname   order by regionname asc", getzonecode(zname));
            }
            drsql = cmdsql.ExecuteReader();
            try
            {
                if (drsql.HasRows)
                {
                    regionname.Add(new SelectListItem { Text = "- Select -", Value = "", Selected = true });
                    regionname.Add(new SelectListItem { Text = "All Region", Value = "AllRegion" });
                    while (drsql.Read())
                    {
                        regionname.Add(new SelectListItem { Text = drsql["regionname"].ToString().ToUpper().Trim(), Value = drsql["regionname"].ToString().ToUpper().Trim() });
                    }
                }
            }
            catch (Exception ex) { cust.WriteToFile(ex.ToString()); return null; }
        }
        catch (Exception ex) { cust.WriteToFile(ex.ToString()); }
        return new SelectList(regionname, "Value", "Text");
    }

这是获取区域列表时调用的方法。

 JAVASCRIPT:
 $(function () {
    $('#zoneitem').change(function () {
        var item = $('#zoneitem').val();
        var region = $("#regionitem");
        region.empty();

        if (item != "") {
            $("#reportsitem").val($("#reportsitem option:first").val());
        }
        $.ajax({
            type: "GET",
            url: "Home/getregion",
            contentType: "application/json; charset=utf-8",
            data: { zname: item },
            cache: false,
            dataType: "json",
            success: function (result) {
                for (var i = 0; i < result.length; i++) {
                    region.append('<option value="' + result[i].Value.trim() + '">' + result[i].Text.trim() + '</option>');
                }
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                alert(errorThrown);                    
            }
        });
    });
});

这是我的 _reference.js 代码,当我调试它时,返回的结果是我网页的 html 格式。拜托,谁能帮我解决这个问题。我已经研究过并尝试过,但仍然是同样的问题。

【问题讨论】:

  • 您的 api 响应中似乎有一些 html 字符。检查它是否包含任何变量的警告或通知,并尝试去除所有 html 字符,然后使用 JSON.parse 解析响应(数据)
  • 打开网络选项卡并检查响应负载。

标签: javascript json ajax model-view-controller


【解决方案1】:

您的回复变成 html 格式的原因有多种。

  1. 您的 ajax 请求的 URL 不存在,因此导致 404 Not Found 错误
  2. 您用于测试的用户 id 无权访问服务器资源,导致 401 Unauthorized Error
  3. 您的 ajax 请求被防火墙阻止,导致 403 禁止错误
  4. 您的服务器端代码正在转储,导致 500 Internal Server Error

可以有更多的场景,但假设你的问题是没有的。 4,你可能得到的回应是这样的:

<html>
    <head>
        <title>500 Internal Server Error</title>
    </head>
    <body>
        <h1>Internal Server Error</h1>
        <p>The server encountered an internal error or misconfiguration and     
        was unable to complete your request.</p>
        <p>Please contact the server administrator, webmaster@example.com 
        and inform them of the time the error occurred, and anything you 
        might have done that may have caused the error.</p>
        <hr>
        <address>Apache Server at xyz.com Port 80</address>
    </body>
</html>

您收到语法错误:JSON 中的意外标记 ”。

正如@torazaburo 在他的评论中提到的,检查您的网络选项卡中的确切响应,并根据消息,在您的服务器端代码中进行更正。

【讨论】:

  • 这听起来像是评论,不应作为答案发布。但如果你将它编辑成一个陈述,它将是一个答案,而且很可能是正确的。
  • @SamiKuhmonen 你是对的。但是,我没有足够的积分来评论问题。
  • 是的,这就是为什么最好将其编辑为答案,因为它是解决问题的好答案。
  • @SamiKuhmonen & VDWWD,我已经编辑了我的原始答案以符合 stackoverflow 指南。谢谢你的建议。 jwpfox 感谢您编辑我的原始答案。
【解决方案2】:

我已经找出了我的代码的问题。它与我的 js 文件有关。在 URL Line 中,我的服务器端找不到我的应用程序的文件夹名称。它将重定向到控制器。

而不是https://my ip 地址/我的文件夹应用程序。变成了这样https://myip address/Home/getregion。它重定向到我的控制器。

所以,我改成这样:

$.ajax({
        type: "GET",
        url: " my folder application /Home/getregion",
        contentType: "application/json; charset=utf-8",
        data: { zname: item },
        cache: false,
        dataType: "json",
        success: function (result) {
            for (var i = 0; i < result.length; i++) {
                region.append('<option value="' + result[i].Value.trim() + '">' + result[i].Text.trim() + '</option>');
            }
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert(errorThrown);                    
        }
    });

谁能帮助我为什么找不到我的应用程序文件夹?非常感谢:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 2018-12-13
    • 2018-03-29
    相关资源
    最近更新 更多