Как извлечь данные из node.js в Ajax?

#javascript #jquery #node.js #ajax

#javascript #jquery #node.js #ajax

Вопрос:

Я пытаюсь научиться отправлять / получать данные из Ajax в node.js . Я могу отправлять данные из ajax, но не могу получать. Не удалось решить проблему. Было бы здорово, если бы кто-нибудь мог объяснить, в чем я ошибаюсь.

Ajax

 $(document).on('submit', '#searchdata', function (e) {
e.preventDefault();
var formData = $(this).serialize();
$.ajax({
 url: location.pathname,
 method: 'POST',
 type: 'POST',
 data: formData,
 processData: false,
 dataType: 'json',
 contentType: 'application/json; charset=utf-8',
 success: function (data) {
                   var ret = JSON.stringify(data);
                   console.log('Success: ' JSON.stringify(data))
               },
               error: function (xhr, status, error) {
                   console.log('Error: '   JSON.stringify(error));
               },
  });
  });
  

node.js

     var myData = '';
    request.on('data', function (data) {
        myData  = data.toString();
    });
 response.writeHead(200, {
             'Content-Type': 'text/json',
             'Access-Control-Allow-Origin' : '*'});
      response.end(myData);
      });
  

Комментарии:

1. Вы получаете какую-либо ошибку в обработчике ошибок Ajax?

2. Нет. Я ничего не получаю.

3. Не могли бы вы добавить журнал в обработчик успеха перед ‘JSON.stringify’ и посмотреть, регистрируется ли он?

4. Эй, я только что попробовал, это не работает

5. хорошо, и какую версию jQuery вы используете?

Ответ №1:

Я вижу это утверждение в документации jQuery Ajax:

Уведомление об устаревании: обратные вызовы jqXHR.success(), jqXHR.error() и jqXHR.complete() удалены с jQuery 3.0. Вместо этого вы можете использовать jqXHR.done(), jqXHR.fail() и jqXHR.always().

 // Assign handlers immediately after making the request,
// and remember the jqXHR object for this request
var jqxhr = $.ajax( "example.php" )
  .done(function() {
    alert( "success" );
  })
  .fail(function() {
    alert( "error" );
  })
  .always(function() {
    alert( "complete" );
  });
  

Я полагаю, вам нужно будет изменить код, аналогичный упомянутому выше в документации.

Комментарии:

1. Я только что попробовал это, но это не выдает мне никакого предупреждения. Вместо этого он печатает в браузере

2. Это работает, когда я задаю текст в типе данных. Итак, я неправильно форматирую JSON при отправке с сервера в .ajax?

3. Спасибо за ответ. На самом деле, я решил проблему. Мне пришлось правильно отформатировать JSON.

Ответ №2:

  1. Вы проверили, что сервер / api, который вы публикуете, возвращает ответ (используйте postman)
  2. Вы проверили заголовки запроса. Возможно, вам потребуется добавить заголовки авторизации (довольно распространенная практика с общедоступными API)
  3. Добавили ли вы client_id, app_id или api_key к запросу
  4. Вы аутентифицировали свой запрос (в основном, пункт 2/3)

2 и 3 должны возвращать ответ, в любом случае я бы использовал postman для проверки. Если postman должен, по крайней мере, вернуть ответ. Проверьте заголовки и заголовок состояния http. Если вы получаете ответ 200, а содержимого нет, скорее всего, проблема с маршрутом или конфигурацией сервера

Пример Ajax $(document).on(‘submit’, ‘#searchdata’, function (e) { e.preventDefault();

 //Get form by id
var $form = #("#form_id");

//Form data
var formData = new formData($form);

$.ajax({
    url: 'http://localhost:300/edit/11', //path to api
    method: 'POST',    //Method to use (GET by default)
    data: formData,    //The data to be posted
    dataType: 'json',   //Expected reponse format
}).done(function(res){ 
    //Results here can contain an error - this is common for custom error types
    //Test for custom error assuming in the format res.error
    if( typeof res.error == 'undefined'){
        console.log(res)
    }else{
        //You have an error
    }
}).fail(function(err){
    console.log(err)
})
  

Комментарии:

1. Также, что вы используете с node.js ? expressjs? если это express, ваш ответ должен быть response.json(myData)

2. Я использую node.js и что-то не так с данными JSON, которые я отправляю с сервера.

3. и что такое местоположение. имя пути? т.е. фактический URL

4. Не используя какие-либо фреймворки, и теперь я могу успешно отправлять данные, т. Е. массив JSON, но цикл не выполняется внутри функции ajax done

5. вот где фреймворк действительно упростил бы это — express просто был бы route.('/path/', function(req, res, next){res.json(myData})