语法错误:未满意的令牌<在JSON中作为位置0

时间:2016-10-29 06:19:56

标签: javascript json ajax model-view-controller

我在使用ajax获取数据时遇到了麻烦。在我在本地测试期间,它确切地返回我想要的东西,但是当我在带有IIS的服务器中发布项目时,它返回我的页面的HTML代码,并且出现错误“语法错误:未出现的令牌<在JSON中为位置0”。谁能帮我。对此,我真的非常感激。谢谢:))

以下是我的代码:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="btn btn-default">+</button>

上面的代码将返回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);
    }

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

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");
    }

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

2 个答案:

答案 0 :(得分:1)

您的回复导致html格式的原因有多种。

  1. 您的ajax请求的网址不存在,从而导致404 Not Found Error
  2. 您正在测试的用户ID无权访问服务器资源,导致401 Unauthorized Error
  3. 您的ajax请求被防火墙阻止,导致403 Forbidden Error
  4. 您的服务器端代码正在转储,导致500内部服务器错误
  5. 可能有更多场景,但假设您的问题是点否。如上所述,您可能会得到的回答如下:

    <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>
    

    您正在获取语法错误:未满意的令牌&lt;在JSON中作为位置0,因为JSON解析器正在读取&#34;&lt;&#34; of&#34;&lt; html&gt;&#34;在响应中,这是一个无效的JSON。

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

答案 1 :(得分:0)

我已经弄明白了我的代码问题。它与我的js文件有关。在URL Line中,我的服务器端无法找到我的应用程序的文件夹名称。它将重定向到Controller。

而不是https://my IP地址/我的文件夹应用程序。它变成了这个https://my IP地址/ 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);                    
        }
    });

任何人都可以帮助我找不到我的应用程序文件夹吗?非常感谢你:))