我做了一个AJAX调用,只返回一个数字:
var lastID = 0;
var loading = true;
// Get latest message ID
$.ajax({
url: "libs/getLatestMessageID.ajax.php",
dataType: "text",
type: "GET",
success: function(data) {
lastID = data;
console.log("Received latest message ID: " + typeof(data) + " \"" + data + "\" " + parseInt(data, 10));
},
});
我从服务器收到的是一个字符串,例如“21”,现在需要转换为数字,以便JS可以用它来计算。在Firefox中,它工作正常,console.log()行的输出是:
收到最新消息ID:字符串“21”21
但谷歌Chrome让parseInt()返回:
收到最新消息ID:字符串“21”NaN
这里出了什么问题?
答案 0 :(得分:5)
该字符串以不可打印的无效字符作为前缀,导致parseInt()
无法将字符串解析为数字,因此返回NaN
(非数字)。
在评论中,您可以通过转义字符串来检查:
... + escape(data) + ...
您还可以使用data.length
查看字符串是否符合预期的长度。
您需要找到此源(可能与编码相关),以便您可以防止字符串以这种方式作为前缀。如果您无法找到源,临时解决方案是在将字符串传递给parseInt()
之前剥离字符串,但不建议将其用于最终解决方案。
您可以使用例如regEx来剥离非数字字符:
Regex using javascript to return just numbers
(或使用评论中建议的内容)
但最终你会想要找到来源。
更新,感谢@ fero的链接,它表示您获得的字符来自原始文件中的BOM标记,表示字节顺序。
您可以在没有此标记的情况下重新编写文件,或者在发送数据之前尝试在服务器端将其删除。如果您的数据是UTF-8,则不会对数据本身产生影响。
答案 1 :(得分:1)
试试这个:
console.log("Received latest message ID: " + typeof(data) + " \"" + data + "\" " + parseInt(data.match(/\d/g).join("")));
实际上我正在使用正则表达式过滤data
中的数字,因为我认为有一些非数字数据即将到来。
答案 2 :(得分:0)
var data = parseInt(" 21", 10);
alert(data);
适用于Google Chrome 32.0和Firefox 27