【问题标题】:JsonResult returning data, but Jquery Ajax returns undefined data when type is GETJsonResult返回数据,但Jquery Ajax在类型为GET时返回未定义数据
【发布时间】:2015-06-16 14:36:03
【问题描述】:

我有一个调用 JsonResult 方法的 javascript 函数,并且 JsonResult 方法将数据发送回该函数,但是当我在 javascript 函数中使用警报对其进行测试时,它返回为未定义。我已经在 SO 上查看了几个类似的答案,例如 JsonResult returns null for Jquery .ajaxJquery ajax not returning data [duplicate],但他们处理的是 POST 而不是 GET,我可以得到一些关于我做错了什么的指导或者我可以找到的方向? 最终结果是我需要从 JsonResult 方法中获取所有返回的数据,然后将其填充到文本字段中。

我的 JsonResult 方法是..

public JsonResult myResult(string id)
    {
        dal = new AWDAL();
        List<CustomerToAdd> cust = dal.GetCustomerByID(id);
        return Json(cust, JsonRequestBehavior.AllowGet);
    }

我的 JavaScript 是这样的..

function DataToGet(whatever) {
    alert(whatever.customerName);
}

function GetCustomerByCustomerID() {
    //var id = selectCustomerID;
    var result = "";
    $.ajax({
        type: "GET",
        url: "@Url.Action("myResult", new { id = "1234-5678-9012" })",
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function (data) {
            return DataToGet(data);
        }
    });
}

我发现这种方式可以做我想做的事,但它适用于 WebAPI2,我没有使用 WebAPI2,但它看起来更好,我什至不确定我是否可以用它来做我想做的事。

function formatItem(item) {
  return item.Name + ': $' + item.Price;
}

function find() {
  var id = $('#prodId').val();
  $.getJSON(uri + '/' + id)
      .done(function (data) {
        $('#product').text(formatItem(data));
      })
      .fail(function (jqXHR, textStatus, err) {
        $('#product').text('Error: ' + err);
      });
}

编辑 响应头

响应正文

【问题讨论】:

  • 所以,问题是,当函数本身被调用服务器端时,你能在 myResult 函数中打断点吗?你能在 javascript 中点击成功断点吗?这两个发生了什么,变量
  • @Fallenreaper,我可以在服务器端命中 JsonResult,但不能命中断点客户端,它只是自动调用警报
  • 我从 kendoui 网格中的选定行调用 GetCustomerByCustomerID,我只是在 GetCustomerByCustomerID 中添加了 ID,因为在将选定行的 ID 传递给函数时遇到问题
  • 您是否在服务器端操作中收到您的请求?如果是,则可能是cross-domain restrictions/Sand-box restrictions 的结果。您的 JS 应该从同一个域请求。如果你不是请求同一个域,那么你应该使用 jsonp。
  • @abzarak,我在 HomeController 中有 JsonResult,它确实返回了数据,但没有从 javascript 中获取返回的数据。这就是你的意思吗?抱歉,我对 MVC 和这类东西比较陌生,我发现这是一场从 webforms 转移的艰苦战斗

标签: javascript jquery ajax asp.net-mvc


【解决方案1】:

有效载荷是一个数组。要在有效负载中获取单个项目,您需要像这样获取它 data[0] 和每个字段 data[0].customerName

【讨论】:

  • 试过了,仍然返回相同的响应头和正文,仍然在警告框中抛出“未定义”
  • function(data, textStatus, jqXHR)这样更新成功函数,并检查每个参数信息可能出现的问题。
  • 我看了一下jqXHR,显示有customerName
  • 数据是否仍然未定义,textStatus 呢?
  • 数据有值,textStatus 表示成功,当数据传递给我的 DataToGet 函数时,数据在那里,但是当它到达 alert(whatever.customerName) 时,消息在警告框显示“未定义”
猜你喜欢
  • 2015-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
  • 2012-04-20
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多