加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为什么我的$.ajax调用不会从cshtml文件返回一个json对象?

发布时间:2020-12-15 05:38:27 所属栏目:百科 来源:网络整理
导读:我有这个 jquery使用ajax试图返回一个json对象,但我不是ajax的专业人士,虽然我之前使用过json,只是我正在加载一个json文件而不是试图从cshtml返回一个字符串查询数据库以获取信息的页面(正如我在这里所做的那样). 这是jQuery: $.ajax({ url: "/AJAX Pages/C
我有这个 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("~/");
    }
}

注意以下几点非常重要:

>我没有得到服务器端错误或错误代码.
>我已将输出写入一个简单的.txt文件来测试内容,并将其粘贴到jsonLint(在这里找到:http://jsonlint.com/)我很容易确定这确实是有效的json语法.
>我仍然总是收到仅在$.ajax调用的“error:function()”选项下运行的警报消息.
>我在整个jsonString之前或之后都没有获得空格(不是那可能很重要).
>我在WebMatrix,C#,asp.net-webpages环境中.
>我唯一的两个怀疑是1)dataType和/或contentType没有正确设置,或者2)我最后一次使用ajax用于json(以实际的.json文件为目标)我不得不更改“IIS Express”中的设置“允许它从json文件接收数据,但是,我认为只有在实际使用ajax解析json”文件而不仅仅是json数据时才需要这样做.而且,无论我在哪里,我似乎都无法找到这个资源.
> textStatus和error参数值为:textStatus:parsererror error:SyntaxError:Unexpected token&但这似乎并没有在我的脑海中抛出任何红旗,因为我知道json语法本身可以检查出来.

感谢大家的帮助.我相信我已经找到了这个问题(意想不到的&符号终于让我的头脑中出现了一个灯泡).我已经在此页面中添加了答案,以防将来可能对其他人有所帮助.

解决方法

我有类似的问题,

我已经通过标题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");
});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读