【问题标题】:javascript object property type accepts only numberjavascript 对象属性类型只接受数字
【发布时间】:2018-05-11 15:36:10
【问题描述】:

我发出一个 Ajax Post 请求,将下面的 Javascript 对象作为 Json 参数发送到 MVC 操作:

 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 上时会看到),并且当我输入数字以外的字符串时输出 null。为什么会这样?

我尝试将属性一一转换为:

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

也尝试过 JSON.stringify() 但在这个对象中不起作用...

【问题讨论】:

  • parseInt()转换所需的值。
  • 您也可以粘贴您的表单html代码吗?好像您使用了错误的输入类型。
  • @Fawaz: 不,val 总是为所有表单控件返回一个字符串。

标签: javascript json object model-view-controller types


【解决方案1】:

为什么会这样?

因为代码明确告诉它,使用一元 +

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

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

等等。

当您将一元 + 应用于字符串时,它会被强制转换为数字。如果不能识别为有效数字,则结果为NaN。 (您说您看到的是null,这表明在某些时候,您正在序列化为 JSON;当序列化为 JSON 时,NaN 被转换为 null,因为 JSON 没有 NaN 值。 )

如果您需要字符串,请从生成相关属性的代码中删除 +

【讨论】:

  • 非常感谢,它成功了!
猜你喜欢
  • 2012-11-19
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-03
  • 1970-01-01
相关资源
最近更新 更多