Я пытаюсь получить массив JS, созданный файлом PHP, и повторно использовать массив JS в сценарии JS на странице. Я пробовал много разных решений, найденных на этом сайте, но ни одно из них не работает, но я не знаю, в чем проблема с моим сценарием.

У меня есть файл PHP, который повторяет следующее:

[["content11", "content12", "content13", "content14","content15"], 
 ["content21", "content22", "content23", "content24","content25"]]

Я использую простой Ajax для получения данных:

$.ajax({
      type: "GET",
      url: myUrlToPhpFile,
      dataType: "html",
      success : function(data) 
          {
              result = data;
              alert (result);

          }
    });

Предупреждение отображает ожидаемый вывод из файла PHP, но если я сейчас пытаюсь получить доступ к массиву, как результат [0], он выводит «[», который является первым символом. Похоже, что JS видит вывод как строку, а не как массив.

Что-то, что я должен сделать, чтобы JS понял, что это массив JS?

Я видел много решений с массивами JSON, но прежде чем идти в этом направлении, я хотел бы проверить, существуют ли простые решения с массивами JS (это помешало бы мне переписывать слишком много кода)

Спасибо Лоран

0
Laurent 20 Дек 2015 в 19:43

3 ответа

Лучший ответ

В вашем php файле вы должны проверить, что ваши массивы отражаются с помощью json_encode.

echo json_encode($arr);

И в вашем файле JavaScript:

$.ajax({
  type: "GET",
  url: myUrlToPhpFile,
  dataType: "html", // json
  success : function(data) 
      {
         var res = JSON.parse(html);
         alert(html); // show raw data
         alert(res); // show parsed JSON
      }
});
1
Larionov Nikita 20 Дек 2015 в 16:57

Ответ @ Ро должен работать нормально, но похоже, что вы используете jQuery для вызова AJAX, что дает вам ярлык; вы можете использовать $ .getJSON вместо $.ajax, и он будет читать данные как JSON и сразу же предоставит вам массив.

$.getJSON(myUrlToPhpFile, function(result) { ... });

На самом деле это всего лишь краткий способ написания того, что у вас уже есть, но с dataType json вместо html, так что вы можете даже сделать это таким образом, если захотите. Все это предполагает, что вы, конечно, используете jQuery, но ваш код следовал их API, поэтому неплохо было бы предположить, что вы используете jQuery или что-то совместимое.

1
Thor84no 20 Дек 2015 в 16:53

Вы можете использовать JSON.parse для форматирования строка обратно в массив.

JSON.parse(result)[0]

Или

var result = JSON.parse(result);
result[0];
1
Rho 20 Дек 2015 в 16:49