【问题标题】:ajax post each loop fails to send value to controllerajax post 每个循环都无法将值发送到控制器
【发布时间】:2014-06-19 07:43:18
【问题描述】:

我正在调用一个 api,我得到一个包含多个数组的数组。所以我想做每个数组并获取每个数组的值 3 并将该值发送到我的控制器方法 addGame。如果我调试它,我可以确保它每次循环每个循环时都会选择正确的值,然后它会转到我的控制器方法,但它发送的值是 null。这是我的代码:

  var date = "02/13/2014";

$.ajax({
    dataType: "jsonp",
    type: "post",
    crossDomain: true,
    url: 'http://stats.nba.com/stats/scoreboard/?LeagueID=00&gameDate=' + date + '&DayOffset=0',
    success: function (val) {
        var result = val.resultSets[0].rowSet;
        $.each(result, function (key, value) {
            var gameID = this[2];
            $.ajax({
                async: false,
                type: "post",
                url: "/Stats/addGame",
                data: gameID,
            });
        });
    }

})

这是我的控制器:

  public void addGame(string gameid) 
    {

    }

【问题讨论】:

  • 您使用的是 Asp.Net MVC 还是 WebAPI 还是 WCF..?
  • asp.net MVC @ErikPhilips
  • 控制器方法不应该返回一个 ActionResult 吗?
  • 是否存在数据不是字符串格式的类型问题? (这是您的功能所期望的)
  • @ErikPhilips 如果我希望它返回一个 ActionResult,它应该。但我希望这发生在后台,所以我不希望返回另一个视图。

标签: jquery ajax arrays asp.net-mvc


【解决方案1】:

我认为您的第二个 ajax 数据需要是 gameid 或者您的 c# 方法需要是 gameID 或者您需要将其作为对象传递,例如 {gameid: gameID},这就是您得到 null 的原因。你传入的是gameID,而不是gameid。无论哪种方式,这都是一种很好的做法。

所以:

$.ajax({
    url: "/Stats/addGame",
    dataType: 'json',
    data: { gameID: gameID },
    type: "POST",
    async: false,
    success: function (data) {},
    error: function (jqXHR, err) {}
}

public void addGame(string gameID) 
{

}

【讨论】:

  • 我总是过度格式化我的 ajax,所以你可能会错过一个我不确定它是否真的是一个选项的选项。我将编辑我的答案示例,因为 cmets 并没有真正的格式
  • 另外,您是否检查过正在传递的内容?在 Chrome 中,您可以在开发人员工具中查看网络选项卡(查看页面时按 f12),它会告诉您表单数据中的内容。我认为它将在表单数据下,因此您至少可以查看它是否以这种方式传递。
  • 所以现在我遇到错误和错误说 parseerror,我该如何正确解析它?所以它不能是 jquery 中的 var 而在 C# 控制器中是字符串?或者解析错误在哪里? @maggiekh
  • 对,所以使用 jquery 你可以解析你的对象,比如 JSON.stringify(YourVariableHere),它会给你类似 "{"gameID":"515646"}" 的东西。您可以使用 JSON.parse(YourVariableHere) 取消字符串化(如果您想稍后传回),这会让您返回 {gameID: 515646} 或返回的任何内容。
  • ive 现在添加了 JSON.stringify(gameID) 但它仍然得到 parseerror。然后我读到在将 dataType 定义为 json 时我可能会得到 parseerror,因为它只是一个字符串。所以我删除了它,现在我没有去 ajaxpost 中的错误并说 parserror 它成功但成功是“”并且我的 C# 控制器方法中的 gameID 是 null
【解决方案2】:

我会参考this question 以找到识别变量内容的最佳方法,然后我会做以下两件事之一:

1) 将来自网络的数据转换为字符串,然后再发送到控制器

-或-

2) 更改控制器函数以期望从网络传入的数据类型

从您的 AJAX 调用来看,您似乎得到了 JSON 作为回报。您可能希望在将其发送到控制器之前对其进行解析。见this question

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-15
    • 2021-08-09
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    相关资源
    最近更新 更多