我有这个使用 ajax 试图返回 json 对象的 jquery,但我不是 ajax 专家,虽然我以前用过 json,但我只是在加载一个 json 文件,而不是试图从 cshtml 返回一个字符串查询数据库以获取信息的页面(就像我在这里所做的那样)。
这是jQuery:
$.ajax({
url: "/AJAX Pages/Compute_Calendar_Events.cshtml",
async: true,
type: "GET",
dataType: "json",
contentType: "application/json",
success: function (jsonObj) {
console.log("AJAX SUCCESS!");
},
error: function (jqXHR, textStatus, error) {
alert("NO AJAX!");
}
});
(我也尝试过“application/json; charset=UTF-8”作为 contentType,但它没有改变任何行为)。
这是我将 AJAX 指向的 cshtml 页面:
@{
Layout = "";
if(IsAjax || 1==1)
{
string jsonString = "{\"events\":[";
string selectQueryString = "SELECT title, summary, eventDate FROM CalendarEvents ORDER BY eventDate ASC";
var db = Database.Open("Content");
foreach (var row in db.Query(selectQueryString))
{
jsonString += "{";
jsonString += "\"title\":" + Json.Encode(row.title) + ",";
jsonString += "\"dateNumber\":" + Json.Encode(row.eventDate.ToString().Substring(0, row.eventDate.ToString().IndexOf("/"))) + ",";
jsonString += "\"dateMonth\":" + Json.Encode(row.eventDate.ToString().Substring(row.eventDate.ToString().IndexOf("/") + 1, row.eventDate.ToString().LastIndexOf("/") - (row.eventDate.ToString().IndexOf("/") + 1))) + ",";
jsonString += "\"dateYear\":" + Json.Encode(row.eventDate.ToString().Substring(row.eventDate.ToString().LastIndexOf("/") + 1, 4)) + ",";
jsonString += "\"summary\":" + Json.Encode(row.summary);
jsonString += "},";
}
jsonString = jsonString.TrimEnd(',');
jsonString += "]}";
/*System.IO.File.Delete(Server.MapPath("~/TEST.txt"));
var outputFile = System.IO.File.AppendText(Server.MapPath("~/TEST.txt"));
outputFile.Write(jsonString);
outputFile.Close();*/
@* *@@jsonString
}
else
{
Response.Redirect("~/");
}
}
注意以下几点非常重要:
- 我没有收到服务器端错误或错误代码。
- 我已将输出写入一个简单的 .txt 文件以测试内容,并将其粘贴到 jsonLint(可在此处找到:http://jsonlint.com/ )中,我很容易确定这确实是有效的 json 语法.
- 我仍然总是收到仅在 $.ajax 调用的“错误:函数()”选项下运行的警报消息。
- 我在整个 jsonString 之前或之后都没有空格(这可能并不重要)。
- 我在 WebMatrix、C#、asp.net-webpages 环境中。
- 我唯一的两个怀疑是1) dataType 和/或 contentType 设置不正确,或者2)上次我不得不对 json 使用 ajax(针对实际的 .json 文件)我不得不更改“IIS Express”中的设置但是,为了允许它从 json 文件接收数据,我认为只有在实际使用 ajax 来解析 json“文件”而不仅仅是 json 数据时才需要这样做。另外,无论我在哪里看,我似乎都找不到这个资源了。
- textStatus 和 error 参数值是:textStatus: parsererror error: SyntaxError: Unexpected token &但这似乎并没有在我脑海中引发任何危险信号,因为我知道 json 语法本身可以检查。
感谢大家的帮助。我相信我已经找到了问题所在(意外的 & 符号最终让我的脑海中出现了一个灯泡)。我已将答案添加到此页面,以防将来可能对其他人有所帮助。