Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome:parseInt()返回NaN_Javascript - Fatal编程技术网

Javascript Chrome:parseInt()返回NaN

Javascript Chrome:parseInt()返回NaN,javascript,Javascript,我做了一个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(

我做了一个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:string“21“21

但是Google Chrome让parseInt()返回以下内容:

收到的最新消息ID:string“21“南


这里出了什么问题?

字符串的前缀是不可打印的无效字符,这导致
parseInt()
无法将字符串解析为数字,因此返回
NaN
(非数字)

与注释中一样,您可以通过转义字符串来检查这一点:

... + escape(data) + ...
您还可以使用
data.length
查看字符串的长度是否与您期望的长度相同

您需要找到该字符串的源代码(可能与编码相关),以便防止字符串以这种方式作为前缀。如果无法找到源代码,临时解决方案是在将字符串传递到
parseInt()
之前剥离字符串,但不建议将其作为最终解决方案

例如,您可以使用正则表达式去除非数字字符:

(或使用评论中建议的内容)

但最终你会想找到源头

更新感谢@fero的链接,它表明您获得的字符来自原始文件中的BOM标记,以指示字节顺序

您可以在不使用此标记的情况下重新写入文件,或者在发送数据之前尝试在服务器端将其剥离。如果您的数据是UTF-8,则不会对数据本身产生影响。

尝试以下方法:

console.log("Received latest message ID: " + typeof(data) + " \"" + data + "\" " + parseInt(data.match(/\d/g).join("")));
实际上,我正在使用regex过滤
数据中的数字,因为我认为有一些非数字数据即将到来

var data = parseInt(" 21", 10);
alert(data);

我在Google chrome 32.0和firefox 27中都能使用它

我试过了,无论是否添加了基本参数,都没有效果。我认为应该是
data.d
与number()和data的结果相同。d:n您的字符串可能包含“不可见”字符。尝试将字符串作为转义字符串输出,即。
…+转义符(数据)+…
可能在
21
前面有一些不可打印的字符。这是一个很好的答案。让我们看看我能不能找到问题。这可能与编码有关吗?AJAX输出来自一个UTF-8文件…@webdesigner97,它可能与编码有关。您可以检查页面使用的编码(或将显式编码设置为UTF-8),还可以检查服务器是否配置为以相同的编码返回数据。