【问题标题】:json being returned via url but not via jqueryjson 通过 url 而不是通过 jquery 返回
【发布时间】:2018-06-29 16:04:54
【问题描述】:

我正在使用 Visual Studio 开发 MVC 应用程序,并且我有一个 jquery 函数,它似乎会导致问题。我开发了一个返回json对象的动作方法(jquery调用动作>动作调用服务>服务返回一个对象>动作通过映射将对象转换为模型,然后将模型传递给j​​son)。可以通过 url 调用该操作(通过查询字符串传递 id 参数)并将 json 返回到网页,但是,当我通过网页调用 jquery 函数时(单击执行 jquery 的按钮),在 jquery 函数的其余部分执行之前,我收到“localhost:50216 说发生了错误”。研究了几天,并尝试使用 Chrome 的调试器无济于事。希望这是有道理的,但如果我需要提供更多信息,请告诉我。任何见解将不胜感激。 最好的, 乔恩

$("#delayEditModal")
    .on("show.bs.modal",
        function (event) {
            var button = $(event.relatedTarget);
            var delId = button.data("guid");
            var name = button.data("name");
            var modal = $(this);
            $.get("@Url.Action("GetDelayDataForEditing", "TrainActivity")", function(data){
                alert("Data: " + data);
            });
            modal.find(".modal-body").text("Edit the Delay at " + name + " with id " + delId);
            modal.find(".modal-footer #delayEditButton").data("guid", delId);
    });

我能够进入显示“在...处编辑延迟”的弹出窗口(当我单击具有 id=#delayEditModal 的按钮时),但是在此之前 - 我相信当 $.get方法执行 - 我收到 500 错误。另外,我从来没有点击过 alert("Data: "..) 部分。

所以我查看了几篇文章(其中一篇 Url.Action: How to Pass Parameter from View to Controller?)并对我的代码进行了一些更改。仍然没有成功。将继续研究解决方案。

$("#delayEditModal")
    .on("show.bs.modal",
        function (event) {
            var button = $(event.relatedTarget);
            var delId = button.data("guid");
            var name = button.data("name");
            var modal = $(this);
            $.ajax({
                type: "GET",
                url: "@Url.Action("GetDelayDataForEditing")/" + delId,
                //data: delId,
                success: function () {
                    alert("Success");
                    //$('#delays-grid').data('kendoGrid').dataSource.read();
                    //$("#delayAddModal").modal("hide");
                },
                error: function () { alert("error"); }
            });
            //modal.find(".modal-body").text("Edit the Delay at " + name + " with id " + delId);
            modal.find(".modal-footer #delayEditButton").data("guid", delId);
    });

编辑:我认为我什至没有使用我的 ActionResult 方法。我已经在那里设置了一个断点,但从来没有打过它。

编辑:我终于能够达到“成功”:

$("#delayEditModal")
        .on("show.bs.modal",
        function (event) {
                var button = $(event.relatedTarget);
                var delId = button.data("guid");
                var name = button.data("name");
            var modal = $(this);

                $.ajax({
                    type: "GET",
                    url: "@Url.Action("GetDelayDataForEditing")/" + "?delayId=" + delId,
                    dataType: 'json',
                    //data: delId,
                    success: function (data) {
                        alert("Success" + data);
                        //$('#delays-grid').data('kendoGrid').dataSource.read();
                        //$("#delayAddModal").modal("hide");
                    },
                    error: function () { alert("error"); }
                });
                modal.find(".modal-body").text("Edit the Delay at " + name + " with id " + delId);
                modal.find(".modal-footer #delayEditButton").data("guid", delId);
        });

但是,我想弄清楚如何在模态中显示 json 对象的原始内容。这必须是星期一的任务。非常感谢大家分享您的建议和见解。周末愉快!

【问题讨论】:

  • @Taplar 抱歉,我忘了包含代码……这周很长。
  • 如果您收到 500 错误,则它是服务器端错误...因此您需要检查服务器的事件或异常日志以获取有关问题的详细信息。不过有一件事 - 在问题文本中你提到“可以通过 url 调用操作(通过查询字符串传递 id 参数)”......但是在你的 $.get 调用中你没有提供任何这样的参数.会不会是这个问题?
  • @ADyson 感谢您的及时回复。我已经检查了我的本地主机服务器日志,除了通用的 500 子状态:0 之外什么都没有。此外,您对缺少参数的观察是我自己想知道的。遗憾的是,我无法从这里的任何高级开发人员那里得到直接的答案——或者如果他们给了我答案,那是希腊语。 SMH。
  • @ADyson 好的,所以我的主管终于给了我一个直截了当的回答,并证实了我怀疑在 jquery 调用操作中缺少 ID。我将不得不研究如何做到这一点。感谢您为我提供动力,让我“振作起来”并接近我的领导。 :)
  • 你能告诉我们服务器上action方法的定义吗?还可以尝试在服务器上的 Windows 事件查看器而不是 IIS 日志中查找错误。并确保您的代码不会在任何地方吞下异常(例如,使用 try-catch 块,它只是忽略捕获的异常而不是记录和/或重新抛出它。

标签: jquery model-view-controller


【解决方案1】:

在问题文本中,您提到“可以通过 url 调用操作(通过查询字符串传递 id 参数)”......但是在您的 $.get 调用中,您没有提供任何此类参数。

您需要向服务器提供一个参数,其名称与您的操作方法所期望的名称相同,例如:

url: "@Url.Action("GetDelayDataForEditing")/" + "?delayId=" + delId,

? 之后的部分是参数名称,= 之后的部分是要为该参数发送的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 2016-11-24
    • 2020-11-11
    • 1970-01-01
    相关资源
    最近更新 更多