2012-05-29 3 views
0

У меня проблемы с javascript и NaN.Номера Javascript и NaN

Я извлекаю одно единственное число через метод POJ ajax в формате JSON.

$.post('test.php?a=b', {w: w}, function(json) { 
    desktop.height = desktop.height - json.height * 2; 
}); 

Когда я пытаюсь размножить его, он дает мне NaN.

desktop.height = desktop.height - json.height * 2; 
NaN 

JSON - это объект, не так ли? Поэтому, когда я вхожу в консоль firebug/chrome, он дает мне int 0, как и ожидалось.

var a = {}; a.t = 0; a.t * 2; 
0 

Даже если я ввожу его в консоль, он все равно дает мне ожидаемое значение 0 int.

var a = {}; a.t = "0"; a.t * 2; 
0 

Мой вопрос: что происходит и как его исправить?

+0

Не могли бы вы предоставить полный тестовый случай? Один, который включает в себя входные данные для вашего выражения. – Quentin

+1

Что делает 'console.log ([desktop.height, json])' show? – DCoder

+0

Вам нужно будет опубликовать JSON, чтобы кто-то объяснил это точно. Вы можете добавить 'console.log()' сообщения в свою функцию обратного вызова, чтобы распечатать 'typeof desktop.height' и' typeof json.height'. – Pointy

ответ

1

Если заголовок Content-Type не установлен в application/json от сервера и до сих пор Если вы хотите JQuery для разбора JSON строки в объект JS автоматически, то вы должны добавить dataTypejson в $.post вызова.

$.post('test.php?a=b', {w: w}, function(json) { 
    desktop.height = desktop.height - json.height * 2; 
    },'json'); 

или вы должны разобрать, что с помощью $.parseJSON самостоятельно, вы, как этот

$.post('test.php?a=b', {w: w}, function(json) { 
    json = $.parseJSON(json); 
    desktop.height = desktop.height - json.height * 2; 
    }); 
+0

Нет, вы не знаете, если тип содержимого ответа задан правильно. Вам нужно только переопределить тип данных, если сервер поврежден. – Quentin

+0

Добавляем '' json'' в качестве 4-го параметра. Спасибо. –

0

Когда вы извлекаете цифры, проанализируйте их с помощью метода Javascript parseInt().

+0

Я пробовал, он не работает, все равно дает мне NaN. –

+0

Это не обязательно, если значениями являются числа в первую очередь. – Quentin

+0

Нечетные. Позвольте мне взглянуть на это немного больше. – Brendan

0

Это зависит от формата строки JSON, поэтому если его {height:<num>}, то да, это правильно. но на самом деле это может быть строка, вы попробовали разобрать ее как int?

parseInt(...) 
+0

Это помогло бы только в том случае, если это была строка, состоящая из числа, за которым следовали некоторые нецифровые символы – Quentin

0

Либо desktop.height или json.height является NaN.

+0

Боюсь, нет. –

+0

@airmattress - Неужели? Как вы его протестировали? Или вы посмотрели на свой PHP и предположили, что оба из них были номерами? – Quentin

0

JSON является строка версии объекта Javascript. Используйте JSON.parse (текст), чтобы создать объект из строки, полученной из вашего сообщения. Я не знаком с вашим методом поста, но я хотел бы попробовать

function(JSON.parse(json)) { 
    desktop.height = desktop.height - json.height * 2; 
} 
-1

При получении вы цифра, анализировать их с помощью JS Номера() метода :)