2015-07-24 5 views
0

На стороне сервера есть следующий код для получения POST запрос:Почему POST возвращает ошибку, даже если все выполнено правильно?

router.post('/signup', function(req, res, next) { 
    //console.log(res); 
    passport.authenticate('signup', function(err, user, info) { 
     console.log(user); 
     if (err) { 
      console.log(err); 
      return next(err); 
     } 
     if (!user) { return res.json({redirect: 'auth'}); } 
     req.logIn(user, function(err) { 
      if (err) 
      { 
       console.log(err); 
       return next(err); 
      } 
      console.log(res); 
      return res.json({redirect: 'userPanel'}); 
     }); 
    })(req, res, next); 
}); 

На стороне клиента следующая функция выполняет запрос POST и обрабатывает ответ:

$("#btn-signup").click(function() { 
    var data = $('form#signupform').serialize(); 
    $.ajax({ 
     type: "POST", 
     dataType: "jsonp", 
     url: "/auth/signup", //process to mail 
     data: data, 
     success: function(msg) { 
      console.log("Received data: " + msg); 
      if (msg.redirect) { 
       window.location.href = msg.redirect; 
      } 
     }, 
     error: function(e) { 
      console.log("Error: " + e.responseText); 
     } 
    }); 
}); 

При создании запроса на пост я получаю следующий консольный выход:

Error: {"redirect":"auth"} 

Поэтому я предполагаю, что сервер вернет все правильно, но не знает, почему на стороне клиента он i s считается ошибкой.

Кто-нибудь знает, что происходит не так?

+1

Это не выглядит, как вы возвращение JSONP, который будет завернутой в функции. Вы уверены, что dataType не должен быть JSON. – adeneo

+0

Спасибо adeneo! Так было. –

+0

Добро пожаловать. – adeneo

ответ

2

Я предполагаю, что вы видите ошибку синтаксического анализа. JQuery ожидает увидеть JSONP, который JSON, завернутый в функции обратного вызова, что-то вроде

callback({"key" : "value"}); 

но вы только возвращение регулярные JSON, как в

{"key" : "value"} 

Изменить тип данных для JQuery из jsonp до json

2

Невозможно выполнить операции POST с использованием JSONP (только операции GET). Я предполагаю, что вам даже не нужен JSONP.

Вместо этого используйте JSON и изменить свой код

dataType: "json", 
Смежные вопросы