在ajax xml响应中正确检测数字数据


Properly detecting numeric data in ajax xml response

我使用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)中——由于XML中的值是一个字符串"1",所以它总是计算为false。因此,我在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中哪些字段是数字字段的标准/正确方法是什么?

您可以使用isNaN()来检测字符串是否为数字。例如,isNaN("5043")返回false,表示"5043"可以解析为数字。然后,只需使用parseInt()来比较该值。例如:


if (parseInt(someValueFromTheXML, 10) === 1) {
 ...
}

另一种方法是使用与==运算符的松散比较,以便"1"==1的计算结果为true。然而,最好使用第一个建议。实际上没有其他方法可以实现这一点,因为XML/HTML属性总是字符串。