0

MongoDB から取得した JSON をシリアル化し、それを $.ajax 呼び出しで要求した JavaScript クライアントに返しています。

$.ajax 呼び出しは次のようになります。

function server_request(URL, httpMethod, dataObject) {

    var output = "";
    var typeofData = "json";
    var dataToSend;

    console.log('server_request ajax [' + httpMethod + '] request to ' + URL + ' with ' + JSON.stringify(dataObject));

    if (dataObject !== null) {
        dataToSend = JSON.stringify(dataObject);

        $.ajax({
            type: httpMethod,
            async: false,
            dataType: typeofData,
            data: { jsonPost: dataToSend },
            timeout: 2000, // Timeout in milliseconds
            url: URL,
            success: function (data) {
                output = data;
            }
            , error: function (jqXHR, textStatus, errorThrown) {
                console.log('Ajax post error jqXHR: ' + JSON.stringify(jqXHR));
                console.log('Ajax post error: ' + textStatus);

                output = new Object();
                output.textStatus = textStatus;
                output.errorThrown = errorThrown;
                output.nutshell = 'n/a - exception thrown';

                console.log('Ajax post error: ' + JSON.stringify(output));
            }

        });
    }

サーバーでは、次のように MVC コントローラーから JSON を返しています。

return new ContentResult { Content = responseDoc.ToJson(), ContentType = "application/json" };

ここで、responseDoc は MongoDB BsonDocument です。

JSON 内に日付要素がない限り、すべて正常に機能します。次のような要素が追加されるとすぐに\"usersynctimestamp\" : new Date(1378905216401)、$.ajax 呼び出しはパーサー エラーで失敗します。

失敗した場合でも、次のように、エラー XHR データを介して問題のある JSON を確認できます。

Ajax post error jqXHR: {"readyState":4,"responseText":"{ \"nutshell\" : \"yes\", \"mongoDocument\" : { \"_id\" : { \"$binary\" : \"TJop8k0+KUKfrEVzI/vV+A==\", \"$type\" : \"03\" }, \"companyname\" : \"Apple\", \"databasename\" : \"Apple\", \"users\" : [{ \"_id\" : { \"$binary\" : \"y2dgrURxUEq/iCdI/eIoPw==\", \"$type\" : \"03\" }, \"email\" : \"marketpoint@evoite.com\", \"firstname\" : \"Ian\", \"password\" : \"aa\", \"surname\" : \"Smith\" }], \"usersynctimestamp\" : new Date(1378905216401) }, \"mongoDocumentCollectionName\" : \"clients\" }","status":200,"statusText":"OK"} 

したがって、$.ajax は、MongoDB C# ドライバーのシリアライザーによって作成された新しい Date() 構文が気に入らないようです。この問題を回避する方法を教えてもらえますか?

どうもありがとう

4

1 に答える 1