我在使用 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 格式有多种原因。
- 您的ajax请求的URL不存在,从而导致404 Not Found错误
- 您测试时使用的用户 ID 无权访问服务器资源,导致 401 未经授权错误
- 您的 ajax 请求被防火墙阻止,导致出现 403 禁止错误
- 您的服务器端代码正在转储,导致 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/