Правильный способ обработки данных из поста с помощью JQuery - PullRequest
1 голос
/ 06 июля 2019

У меня проблема с преобразованием данных, поступающих с сервера с публикацией в JQuery, поскольку данные, полученные с сервера, относятся к «типу» [объект объекта]

Примечания: данные, полученные с сервераПредполагается, что это JSON

Я пытался преобразовать ответ сервера напрямую в JSON. У меня возникла ошибка, поэтому я сначала попытался преобразовать ответ в строку, а затем в JSON, но это тоже не удалось,код следующий:


// THE FOLLOWING CODE IS FROM A HTML PAGE

  $('#login-form').submit(function(event){
    event.preventDefault();
    // Get some values from elements on the page:
    let $form = $(this),
      email = $form.find("input[name='email']").val(),
      password = $form.find("input[name='password']").val(),
      url = $form.attr('action');
    // Send the data using post
    let posting = $.post(url, {useremail: email, userpassword: password}, 
          function(data, status, xhr){ // catch response from the server
            let responseString = JSON.stringify(data); // convert response from [object Object] to String
            let responseJSON = JSON.parse(responseString); // convert response string to JSON type
    });

  });

/// THE FOLLOWING CODE IS FROM THE SERVER SIDE
res.json({
   status: 'some status',
   message: 'some message'

});

Ожидаемые результаты состоят в том, что данные преобразуются в словарь JSON

Ответы [ 3 ]

0 голосов
/ 06 июля 2019

Ваш сервер уже отправляет ответ в формате JSON, поэтому во внешнем интерфейсе (на стороне клиента) нет необходимости JSON.stringify() отвечать и снова использовать JSON.parse() для него.

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

Поэтому попробуйте удалить следующую строку из вашего файла .js

let responseString = JSON.stringify(data);

Вместо этого попробуйте

console.log(data.status);
console.log(data.message);

Проверьте, получаете ли вы соответствующий журнал в консоли браузера.

0 голосов
/ 06 июля 2019

Пока ваш сервер возвращает допустимый контент JSON, данные, возвращаемые jQuery POST, будут JavaScript-объектом JSON, который вам не нужно обрабатывать, например:

$.post(url, data, function(data, status, xhr) {
    // data is a JSON object with the server response
    let id = data.id;
    alert("Your new post was saved with id: " + id);
});

Обратите внимание, как я получаю доступ к данным напрямую.

Пожалуйста, проверьте этот простой jsfiddle, который я создал для быстрой демонстрации; он использует фиктивный API для выполнения запроса POST:

https://jsfiddle.net/danyalejandro/x46wzjdy/11/

0 голосов
/ 06 июля 2019

Используйте JSON.parse(), чтобы ваш код выглядел так:

let responseJSON;
$('#login-form').submit(function(event){
    event.preventDefault();
    // Get some values from elements on the page:
    let $form = $(this),
      email = $form.find("input[name='email']").val(),
      password = $form.find("input[name='password']").val(),
      url = $form.attr('action');
    // Send the data using post
    let posting = $.post(url, {useremail: email, userpassword: password}, 
          function(data, status, xhr){ // catch response from the server
            let responseString = JSON.stringify(data); // convert response from [object Object] to String
            responseJSON = JSON.parse(responseString); // convert response string to JSON type
    });
  });

  console.log(responseJSON.message);
  if(responseJSON.hasOwnProperty('message') {
    console.log(responseJSON['message']);
  } else {
    console.log("'message' not found in response");
  }

Оба будут работать. И если под «словарем» вы подразумеваете пары ключ-значение с уникальными ключами, ключи объекта JSON всегда должны быть уникальными. Вы можете проверить, существует ли ключ в объекте, используя метод hasOwnProperty(), как описано выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...