2011-12-14 3 views
1

オブジェクトの配列を保持するオブジェクトを文字列化しようとすると、値がわかると空の配列が得られます。オブジェクトの配列を保持するオブジェクトを文字列化するためにJSONを使用しようとしています

filterDto: { 
      Expressions: [] 
     }, 

/* Using a tempArray to see if its an object issue of my filterDto.Expressions */ 

fnBuildFilterValues: function() { 

      var invoiceObj = this; 

      var tempArray = new Array(); 


       $("#tblExpressions tr").each(function() { 

       var doWeAddRow = false; 
       var filterObject = { 
        "Field": {}, 
        "Condition": {}, 
        "DataValue": {} 
       }; 

       $(this).find(":input").each(function() { 

        if ( $(this).attr('name') === 'ddlFieldExp') { 
         filterObject.Field = $(this).val(); 
        } 
        if ( $(this).attr('name') === 'ddlConditionExp') { 
         filterObject.Condition = $(this).val(); 
        } 
        if ( $(this).attr('name') === 'tbDataExp') { 
         filterObject.DataValue = $(this).val(); 
        } 

       }); /* Inner loop */ 

       tempArray.push(filterObject); 

       }); /* Outer loop */ 

       invoiceObj.filterDto.Expressions = tempArray; 
     }, 

そして、何が欲しいのようなものを使用することです:

 var objToString = {}; 
    objToString = JSON.stringify(invoiceObj.filterDto) 

を私は治療薬として=を{}を使用してみましたが、私はまだ私の配列が移植されるときにObjToStringが空の状態で終わります。これは、このようにショーだ:{"Expressions":[]}

私は右手部分、JSON.StringifyにVSで[クイックウォッチをすれば、私はこの取得:

JSON.stringify(invoiceObj.filterDto) 
    "{"Expressions":[{"Field":"6","Condition":"0","DataValue":"2"}]}" String 

しかし、なぜObjToStringは空の結果を示しているの?

+0

invoiceObj.filterDto.Expressions = tempArray; – cjsmith

+0

JSON.stringify()はどこでやっていますか?あなたは私たちにそれを示していない。私はあなたが正しいことでJSON.stringify()をやっていないことを推測しています。参考までに、変数をオブジェクトに初期化することは、何か他のものを代入するだけでは何もしません。 – jfriend00

+0

私はvar test = JSON.stringify(invoiceObj.filterDto)をその関数の終了のすぐ下に置くことができ、私は同じ結果を得ます。 jqGridポストの中でstringifyを呼び出すのですが、このオブジェクトがJSONからどのようにフォーマットされるのかという問題があります。 – cjsmith

答えて

0

ペーストしたコードは、by this code(console.logのJSONシリアル化)のように正常に動作しています。

シリアル化の試行前にfnBuildFilterValuesが呼び出されていないことはありますか?選択したセレクタが結果を得られないという問題はありますか?この問題は、貼り付けられたコードには含まれていないようです。

+0

これはまさに何が起こっているかです。 fnBuildFilterValuesを呼び出すと、関数が返った後にグリッドがリロードされます。$( '#gridMaster')。trigger( "reloadGrid");更新されたpostDataを使わずにリロードし、毎回最初のエントリpostdataを使用する(もちろん空のバージョン)プッシュしてくれてありがとう。 – cjsmith

関連する問題