ПУБЛИКУВАНЕ на json за изразяване с помощта на jQuery

Имам проблем, когато изпращам JSON данни от моя клиент към сървър на възел, изпълняващ експрес.

Ето прост сървър, който демонстрира моя проблем:

var express = require('express');

var app = express();

app.configure(function(){   
    app.use(express.bodyParser());
    app.use(app.router);
    app.use(express.logger());
});

app.listen(80);

app.post('/', function(req,res){
    console.log(req.body);
    console.log(req.body.number + 1);
});

Този сървър просто записва всички POST данни в конзолата.

Ако след това поставя следното в конзолата за разработка на chrome: $.post('/', {number:1});

Сървърът разпечатва:

{ number: '1' }
11

Как мога да спра числото, което предавам, да се интерпретира като низ? Има ли нещо общо с мидълуера bodyParser, който използвам?

Всяка помощ се оценява!


person Ed_    schedule 11.05.2013    source източник


Отговори (1)


$.post изпраща url-кодирани данни, така че това, което наистина се изпраща, е number=1, което след това се анализира възможно най-добре от междинния софтуер на bodyParser.

За да изпратите json, трябва да използвате JSON.stringify({number:1}).

Използването на $.post за съжаление няма да зададе подходящата заглавка Content-Type (express ще се справи така или иначе), така че е по-добре да използвате:

$.ajax({
    url: '/', 
    type: 'POST', 
    contentType: 'application/json', 
    data: JSON.stringify({number:1})}
)
person soulcheck    schedule 11.05.2013
comment
И не забравяйте да добавите заглавката contentType: 'application/json' или изобщо няма да има данни в req.body на сървъра. - person Christiaan Westerbeek; 21.03.2014
comment
@soulcheck можеш ли да погледнеш въпроса ми тук? stackoverflow.com/questions/47085674 / той е подобен на този, но трябва да изпратя друго свойство с масива - person Viet; 03.11.2017
comment
Коментарът на Кристиан Вестербек за парите. Не бъркайте json: true с contentType: 'application/json'. Не е същото. Добавете contentType: 'application/json', ако искате да работи. - person codemonkey; 10.09.2019