1

現在、次のjson応答を取得しています。

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

以下のように「イベント」と呼ばれる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 を必要なものに変換する方法を知っている人はいますか?

ありがとう、

4

4 に答える 4

2

以下を使用できます。

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

または、より良い互換性のために:

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

またはjQueryソリューション

return {events: $.parseJSON(msg.d)};
于 2012-12-15T13:56:43.160 に答える
0

これが必要だと思います:

    success: function (msg) {
        // The event object is what you require
        var eventObj = {events:msg.d};
        document.write(eventObj);
    },
于 2012-12-15T13:33:22.773 に答える
0

msd.d の場合

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

次に、次のように返すことができます。

return {
     events : msg.d
  };

ただし、それを返すにはコールバックを行う必要があります。ajax は非同期だからです。それがあなたが望んでいたものなので、リターンを追加しました。別の方法は、ajax 呼び出しを同期にすることです。

于 2012-12-15T13:34:03.957 に答える
0
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 リクエスト データを単純に返すことはできません。配列が利用可能になったときに配列を処理できるように、すべてのコードをコールバック関数に入れる必要があります。

于 2012-12-15T14:09:01.553 に答える