javascript - 语法错误: Unxpected token < in JSON as position 0

标签 javascript json ajax model-view-controller

我在使用 ajax 获取数据时遇到问题。在我在本地测试期间,它返回的正是我想要的内容,但是当我使用 IIS 在服务器中发布项目时,它返回我的页面的 HTML 代码,并显示错误“语法错误:意外的 token < 在 JSON 中作为位置 0”。谁能帮我。对此,我真的非常感激。谢谢:)

下面是我的代码:

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 格式。请任何人都可以帮我解决这个问题。我已经研究并尝试过,但仍然存在同样的问题。

最佳答案

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

  1. 您的ajax请求的URL不存在,从而导致404 Not Found错误
  2. 您测试时使用的用户 ID 无权访问服务器资源,导致 401 未经授权错误
  3. 您的 ajax 请求被防火墙阻止,导致出现 403 禁止错误
  4. 您的服务器端代码正在转储,导致 500 内部服务器错误

可能还有更多情况,但假设您的问题是问题所在。 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 中的意外标记 < 作为位置 0,因为 JSON 解析器正在读取响应中“”的“<”,这是无效的 JSON。

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

关于javascript - 语法错误: Unxpected token < in JSON as position 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40316621/

相关文章:

javascript - 从经典 ASP 中转义 Javascript 变量中的引号

android - 如果 Android 中互联网中断,应用程序崩溃

javascript - 动态定义 Ember 数据模型的属性

android - 无法使用 JSON 从 MySQL 检索数据并将其放入带有 Fragments 的 ListView 中

javascript - 如何以编程方式更改此下拉菜单中的所选项目?

javascript - 按列jquery对表格进行排序

javascript - CSS 的条件包含

ajax - 将所有 seo 返回到 index.php

jquery - 使用 Rails 3 和 jQuery 进行 Ajax - 从 JS 调用

javascript - POST 请求中的 500