Ho questo jquery che usa ajax nel tentativo di restituire un oggetto json, ma non sono un professionista in ajax, sebbene lo abbia usato prima con json, solo che stavo caricando un file json e non provavo a restituire una stringa da una pagina cshtml che interroga un database per informazioni (come sto facendo qui).
Ecco 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!");
}
});
(Inoltre ho provato "application/json; charset = UTF-8" come contentType, ma cambia alcun comportamento).
Ecco la pagina cshtml che indico AJAX per:
@{
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("~/");
}
}
E 'molto importante notare un paio di cose:
- ottengo nessun errore sul lato server o codice di errore.
- Ho scritto l'output in un semplice file .txt per testare il contenuto e incollandolo in jsonLint (trovato qui: http://jsonlint.com/) sono stato facilmente in grado di determinare che questa è, effettivamente, una sintassi json valida.
- Ricevo sempre il messaggio di avviso che viene eseguito solo con l'opzione "error: function()" della chiamata $ .ajax.
- Non ricevo spazi bianchi né prima né dopo l'intero jsonString (non che ciò sia probabilmente importante).
- Sono in un ambiente WebMatrix, C#, asp.net-pagine web.
- miei unici due sospetti sono 1) il tipo di dati e/o contentType non è impostato correttamente, o 2) L'ultima volta che ho dovuto usare Ajax per JSON (puntando a un file .json effettivo) ho dovuto cambiare un'impostazione in "IIS Express" per consentire di ricevere dati da file JSON, tuttavia, ho pensato che fosse necessario solo se effettivamente si utilizzava ajax per analizzare un "file" JSON e non solo dati JSON. Inoltre, non importa dove guardo, non riesco a trovare più questa risorsa.
- Il textStatus e di errore dei valori dei parametri sono: textStatus: Errore ParserError: SyntaxError: imprevisto gettone &, ma questo non sembra gettare qualsiasi bandiere rosse nella mia mente, perché so che la sintassi JSON da sola estrae ok .
Grazie a tutti per tutto il vostro aiuto. Credo di aver trovato il problema (l'inaspettato token commerciale ha finalmente fatto accendere una lampadina nella mia testa). Ho aggiunto la risposta a questa pagina, nel caso in cui possa aiutare qualcun altro in futuro.
L'errore indica che si è verificato un errore sul server, non nel browser. – Barmar
E 'contentType' è irrilevante con' type: "GET" ', perché non c'è contenuto (' contentType' si riferisce ai valori del modulo, 'dataType 'si riferisce alla risposta). – Barmar
È necessario utilizzare Json.Write per generare il JSON ,. Non dovresti costruirlo in questo modo: 'Json.Write (db.Query (selectQueryString), Response.Oputput)' –