2017-11-28 5 views
1

を受け入れ、私はMVCのアクションにJSONパラメータとしてJavaScriptオブジェクトの下に送信し、AjaxのPOSTリクエストを行います。javascriptオブジェクトのプロパティタイプは数字のみ

var productName, exchangeName, productCode, stockCode; 
var categoryID, brandID, stockAmount, state, shippingWeight; 

var sendinfo = 
      { 
       "pcb": { 
        "ProductViewModel": { 
         "ProductName": + $('#ProductViewModel_ProductName').val() 
         "ProductCode": + $('#ProductViewModel_ProductCode').val(), 
         "StockCode": +$('#StockViewModel_StockCode').val(), 
         "StockAmount": +$('#StockViewModel_StockAmount').val(), 
         "ShippingWeight": +$('#ProductViewModel_ShippingWeight').val(), 
         "State": +state 
        }, 
        "CategoryViewModel": { "Kategori": +categoryID }, 
        "BrandViewModel": { "BrandName": +brandID }, 
        "ExchangeViewModel": { "ExchangeName": +exchangeName } 
       } 
      }; 

私の問題は、これらのプロパティのタイプについてです。いくつかは文字列としての入力であることを意図していますが、このオブジェクトは数字だけを受け入れます(私がpcb上に置かれたときを参照)。そしてnumber以外の文字列を入力するとnullを出力します。なぜこうなった?

私は1でプロパティを1つずつ変換するのにしようと試み:

string($('#StockViewModel_StockCode').val()) 

ともJSON.stringifyをしようと試みた()が、

+0

'parseInt()'で必要な値を変換します。 – Mamun

+0

フォームのHTMLコードも貼り付けることができますか?間違った入力タイプを使用しているようです。 – Fawaz

+0

@Fawaz:いいえ、 'val' ** always **はすべてのフォームコントロールの文字列を返します。 –

答えて

0

ですが、なぜでしょう...このオブジェクトの内部で動作しませんでしたか?

コードが明示的に単項+を使用して、それを伝えるため、次ように

"ProductName": + $('#ProductViewModel_ProductName').val() 
// ------------^ 

"CategoryViewModel": { "Kategori": +categoryID } 
// --------------------------------^ 

と。

文字列に単項の+を適用すると、数値に強制変換されます。有効な数値として認識できない場合は、結果はNaNです。 (あなたはいくつかの点で、あなたはJSONにシリアライズしていることを示唆しているnull、見ていると述べました。JSONとしてシリアライズするときJSONは何NaN値を持っていないのでNaNは、nullに変換されます。)

したい場合問題のプロパティを生成するコードから+を削除します。

+0

ありがとう、それは動作します! – Zeynep

関連する問題