【问题标题】:Loop through json return undefined循环通过json返回未定义
【发布时间】:2012-11-29 09:33:08
【问题描述】:

我有一个返回 JSON 对象的 web 服务,但是当我尝试循环访问它时,每个对象中的每个项目都返回 undefined

这是从 web 服务返回的 JSON 对象

[{"result":14,"question":"6 - 7  مرات اسبوعيا","aID":70},{"result":29,"question":"3 - 5 مرات اسبوعيا","aID":71},{"result":41,"question":"مرة واحدة اسبوعيا","aID":72},{"result":14,"question":"1 - 3 مرات شهريا","aID":73}]

这里是我如何循环遍历它:

var resultAsJson = data.d;
$.each(resultAsJson, function (index, resObject) {
    $('#pollResults').append('<p><strong>' + resObject.result + ' ' +
                resObject.question + '</strong></p>');
    alert(resObject.question);

});

------------------ 更新 ------------------

大家好, 上面的代码运行良好,问题是我从 web 服务返回的 JSON 响应被序列化如下:

                Dim m_result As New Data.Objects.ObjectParameter("Result", GetType(Boolean))
            Dim lstofresult As List(Of addPollvote_Result) = Context.addPollvote(para_pid, para_aid, Date.Now, m_UID, Nothing, HttpContext.Current.Request.ServerVariables("REMOTE_ADDR"), Nothing, m_result).ToList
            Dim m_json As New Script.Serialization.JavaScriptSerializer
            Return m_json.Serialize(lstofresult)

当我删除序列化并返回列表时,它运行良好,请参见下面的工作代码。

                Dim m_result As New Data.Objects.ObjectParameter("Result", GetType(Boolean))
            Dim lstofresult As List(Of addPollvote_Result) = Context.addPollvote(para_pid, para_aid, Date.Now, m_UID, Nothing, HttpContext.Current.Request.ServerVariables("REMOTE_ADDR"), Nothing, m_result).ToList
            Return lstofresult

而且效果很好。

【问题讨论】:

  • 看起来它对我有用,只要正确填充 resultAsJson - 请参阅这个 jsfiddle:fiddle.jshell.net/njyvB
  • @Moe9977 正如@Chris 所说,您填充resultAsJson 的方式可能有问题。你能发布更多代码吗? data.d 是什么?
  • @Trevor,你是对的,有问题,我在上面发布了更新。

标签: javascript asp.net vb.net json web-services


【解决方案1】:

确保resultAsJson 实际上是一个 JSON 对象而不是字符串,并且它应该可以工作 (see this jsfiddle) - 使用 resultAsJson = JSON.parse(resultAsJson) 进行从字符串到 json 对象的转换。

【讨论】:

    【解决方案2】:

    试一试。我假设您使用的是 jQuery:

    // The JSON String from the web service
    var jsonString = '[{"result":14,"question":"6 - 7  مرات اسبوعيا","aID":70},{"result":29,"question":"3 - 5 مرات اسبوعيا","aID":71},{"result":41,"question":"مرة واحدة اسبوعيا","aID":72},{"result":14,"question":"1 - 3 مرات شهريا","aID":73}]';
    
    // Parse the JSON string into a JS object
    var jsonObj = JSON.parse(jsonString);
    
    // Loop through, and pull what you need from it
    $(jsonObj).each(function() {
        console.log(this.result + " " + this.question); 
    });
    

    【讨论】:

      【解决方案3】:

      问题似乎出在您的数据源上。

      我会使用“for”循环进行测试:

      var resultAsJson = data.d;
      var resultAsJsonLength = resultAsJson.length;
      
      for(i=0;i<resultAsJsonLength;i++) {
          $('#pollResults').append('<p><strong>' + resultAsJson[i].result + ' ' +
          resultAsJson[i].question + '</strong></p>');
      
          alert(resultAsJson[i].question);
       }
      

      您将不得不提供有关如何访问数据的更多信息,这似乎是您的问题的基础......

      【讨论】:

      • -1 - 正如所写,这绝对是不正确的 - indexresultAsJsonresObject 的索引,不应用于索引到 resObject
      • 这就是 $.each 在幕后所做的,不管怎样,对于数组。
      • 是的,这就是我匆匆忙忙的结果。应该更正。
      • 我希望扩展的表单能帮助他解决问题,如果不能彻底解决的话。
      • 所以现在有了更正,它似乎所做的就是将 jquery 循环更改为 for 循环 - 这如何解决对象返回未定义的问题?
      猜你喜欢
      • 2013-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-05
      • 2016-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多