我正在使用jQuery发布ajax请求,并使用PHP来构建XML响应。一切正常,但我想知道我用于数据输入的方法,以及是否有更标准的方法或更正确的方法。我的XML通常如下所示,其中一些属性表示文本,其他属性表示数字数据:
<UnitConversions>
<UnitConversion basicUnitName="mile" conversionFactor="5280" conversionUnit="foot"/>
<UnitConversion basicUnitName="mile" conversionFactor="1760" conversionUnit="yard"/>
</UnitConversions>
我有很多不同的对象,而不仅仅是这一种类型,所以在我的构造函数中,我只是从XML节点复制属性而不是初始化每个属性:
var UnitConverter = function(inUnitConversionNode) {
var that = this;
$.each(inUnitConversionNode.attributes, function(i, attribute) {
that[attribute.name] = attribute.value;
});
};
我在检查数值时很早就遇到了问题,如if(someValueFromTheXML === 1)
- 这总是会计算为false
,因为XML中的值是一个字符串,“1”。所以我在XML中的关键位置添加了节点,告诉我的客户端代码将什么解释为数字以及要作为文本留下什么:
<UnitConversions>
<NumericFields>
<NumericField fieldName="conversionFactor"/>
</NumericFields>
<UnitConversion basicUnitName="mile" conversionFactor="5280" conversionUnit="foot"/>
<UnitConversion basicUnitName="mile" conversionFactor="1760" conversionUnit="yard"/>
</UnitConversions>
所以现在我将NumericFields节点传递给构造函数,以便知道哪些字段存储为实际数字。
这一切都很有效,但它似乎有点天真的解决方案,甚至可能是黑客攻击。似乎那里会有更复杂的东西。看起来这个问题与XML模式有关,但我的谷歌搜索似乎表明模式更多的是关于验证,而不是打字,而且它们似乎都面向服务器端处理。
js知道XML中哪些字段是数字的标准/正确方法是什么?
答案 0 :(得分:1)
您可以使用isNaN()
来检测字符串是否为数字。例如,isNaN("5043")
返回false,表示可以将“5043”解析为数字。然后,只需使用parseInt()
来比较该值。例如:
if (parseInt(someValueFromTheXML, 10) === 1) {
...
}
另一种方法是使用与==运算符的松散比较,以便“1”== 1计算结果为true。但是,最好使用第一个建议。实际上没有其他方法可以解决这个问题,因为XML / HTML属性总是字符串。