Озадачен, почему успех Javascript AJAX: данные JSON «недействительны»

#javascript #jquery #json #ajax #flask

#javascript #jquery #json #ajax #flask

Вопрос:

Я озадачен, почему мой Flask с именем JSON data не считывается оператором ожидания успеха ajax, который очень хорошо работает в другом месте. Я понимаю, что оператор Success: должен ожидать возврата данных, и это происходит, но тогда возвращаемые данные недоступны как любой JSON. Нет ошибок консоли или браузера, которые указывали бы, почему данные считаются «недействительными»

Функция Flask

 @blueprint.route('/target_liner')
def target_liner():

    ind_id = int(request.args.get('ind_id'))
    label = "1508 Loss Correction"
    data = '[{"Program_Name":"'   label   '"}]'
    return data
  

Данные JSON

[{"Program_Name":"1508 Loss Correction"}] // Это подтвержденный законный JSON

Javascript

 function updates() {
      $.ajax({
          url: "/target_line",
          method: "GET",
          data: {
              ind_id: 1508
          },
          success: function (data) {
            
            console.log(data);
            alert(data);  // This shows the JSON string correctly in Chrome Inspect console

            alert(data.Program_Name);
            alert(data[0]['Program_Name']);
            alert(data[0].Program_Name );
      }
    });
};

updates();
  

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

1. Ваш data — это строка. Они не преобразуются в объект. Попробуйте добавить dataType: "json", к вашему $.ajax({}) вызову.

2. Немедленно решил проблему. Я пробовал это раньше, но из-за несвязанной проблемы я удалил его — thx Rocket! @RocketHazmat

Ответ №1:

Перенастроенные данные представляют собой строку. Вы можете либо выполнить JSON.parse (data) после успешного выполнения, либо использовать тип данных: ‘json’ в вашем ajax-запросе. вы можете получить ошибку синтаксического анализа, если ваша строка JSON не сформирована должным образом при использовании типа данных: ‘json’ .

Ответ №2:

У вас есть три возможности:

  1. в вашей flask измените возвращаемые данные на return jsonify (данные);
  2. добавьте тип данных: «json», к вашему вызову ajax согласно комментарию @Rocket Hazmat;
  3. добавьте к ответу successes преобразование из строки в json: data = JSON.parse(данные);
 $.ajax({
    url: "/target_line",
    method: "GET",
    data: {
        ind_id: 1508
    },
    success: function (data) {

        data = JSON.parse(data);
        console.log(data);

        console.log(Object.keys(data[0])[0]);  // print: Program_Name
        console.log(data[0].Program_Name );    // print: 1508 Loss Correction
    }
});
  

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

1. Или, в-четвертых, просто используйте $.getJSON()