【问题标题】:convert json response to javascript array将 json 响应转换为 javascript 数组
【发布时间】:2012-12-15 13:27:43
【问题描述】:

我目前收到的 json 响应是:

[{"id":1,"title":"Test 1 "},{"id":2,"title":"Test 2"}]

我想将它转换为一个名为“events”的javascript数组,如下所示,以便我可以返回它:例如:

  return {
     events : [
        {
           "id":1,
           "title":"Test 1"
        },
        {
           "id":2,
           "title":"Test 2"
        }
     ]
  };

我收到了来自 jquery ajax 调用的响应:

    jQuery.ajax({
        type: "POST",
        url: "calendar.aspx/get_all_events",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            document.write(msg.d);
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert('Error getting events from database.');
        }
    });

有人知道我如何将 msg 或 msg.d 转换为所需的吗?

谢谢,

【问题讨论】:

  • 什么是 msg.d?您的回复似乎已经采用了您需要的格式。
  • 你不能用eval(msg.d) 吗?
  • 页面加载完毕后不能使用document.write

标签: javascript jquery asp.net json


【解决方案1】:

你可以使用:

return {events: JSON.parse(msg.d)};

或者,为了更好的兼容性:

eval("var result = "+msg.d);
return {events: result};

或者jQuery解决方案

return {events: $.parseJSON(msg.d)};

【讨论】:

    【解决方案2】:

    如果 msd.d 是

     [{"id":1,"title":"Test 1 "},{"id":2,"title":"Test 2"}] 
    

    那么你可以像这样返回它:

    return {
         events : msg.d
      };
    

    但是您必须进行回调才能返回它。因为ajax是异步的。我添加了退货,因为那是您想要的。另一种方法是使 ajax 调用同步。

    【讨论】:

      【解决方案3】:

      我想你只需要这个:

          success: function (msg) {
              // The event object is what you require
              var eventObj = {events:msg.d};
              document.write(eventObj);
          },
      

      【讨论】:

        【解决方案4】:
        function doXHR( callback ) {
           jQuery.ajax( {
                type: "POST",
                url: "calendar.aspx/get_all_events",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function ( event ) {
                    callback && callback( event );
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    alert('Error getting events from database.');
                }
            });
        }
        
        doXHR( function( event ) {
            var data = { events: event.d };
            // Do other stuff with data here (processing, displaying, etc.).
            // You can call other functions here and feed them with data.
        } );
        

        请注意,XHR 请求是异步的。您不能简单地返回 XHR 请求数据。您必须将所有进一步的代码放入回调函数中,以便它可以在可用时处理您的数组。

        【讨论】:

          猜你喜欢
          • 2022-06-15
          • 2021-11-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-02
          • 2014-06-21
          • 2014-06-09
          相关资源
          最近更新 更多