[英]Why won't my $.ajax call return a json object from a cshtml file?
我有這個jquery使用ajax試圖返回一個json對象,但我不是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("~/");
}
}
注意以下幾點非常重要:
感謝大家的幫助。 我相信我已經找到了這個問題(意想不到的&符號終於讓我的頭腦中出現了一個燈泡)。 我已經在此頁面中添加了答案,以防將來可能對其他人有所幫助。
我有類似的問題,
我已經通過標題WebMatrix中.cshtml
文件頂部的標題解決了這個問題
@{
Response.AddHeader("Content-Type","application/json");
}
要檢查的另一件事是您的JSON通過驗證。 將JSON結果復制粘貼到JSON驗證器中並確保它通過。 (你已經這樣做了,我希望這個問題的未來讀者能夠看到這一點)。
以下是您可以獲取JSON的示例代碼
$.getJSON("/AJAX Pages/Compute_Calendar_Events.cshtml").done(function(result){
alert("Success!");
console.log(result);
}).fail(function(){
alert("Error loading");
});
對我來說,問題是由於剃刀的自動HTML編碼(因此將許多字符轉換為他們的&...;
HTML編碼的等價物)。
因此,我不需要編寫@jsonString
而是編寫@Html.Raw(jsonString)
從而繞過(如我原先的意圖)任何可能扭曲json語法的進一步編碼。
另外,我沒有發現有必要添加Response.AddHeader("Content-Type","application/json");
雖然我使用的是$.ajax
而不是$.getJSON
再次感謝大家的幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.