Проблема с построением структуры JSON - PullRequest
1 голос
/ 02 марта 2011

Прежде всего, я загружаю несколько изображений, которые проходят через цикл for по входному файлу с несколькими вариантами выбора (HTML5), однако при попытке вывести ссылки в формате JSON выводится только одно имя файла изображения, дажекогда я выбрал 2+ изображений.

Вот как я создаю JSON (важные части, а не полный сценарий):

$count = 0;
$image_count = count($_FILES['file']);

for($i = 0; $i < $image_count; $i++)
{
    $filename = random(13) . fileExt($_FILES['file']['name'][$i]);

    move_uploaded_file($_FILES['file']['tmp_name'][$i], 'images/' . $filename);

    $output = array();

    $output['url'] = 'http://www.mywebsite.com/images/' . $filename;
    $output['name'] = $filename;

    $count++;
}

if($count == $image_count)
{
   echo json_encode($output);
}

Окончательный результат выглядит следующим образом:

{
    "url": "http://www.mywebsite.com/images/0Z9O3a9q1k2A8.jpg",
    "name": "0Z9O3a9q1k2A8.jpg"
}

Когда на нем должно быть несколько изображений, перечисленных так:

{
    "url": "http:\/\/www.mywebsite.com\/images\/0Z9O3a9q1k2A8.jpg",
    "name": "0Z9O3a9q1k2A8.jpg"
},
    {
    "url": "http:\/\/www.mywebsite.com\/images\/3jn5jk5n4kj5n.jpg",
    "name": "3jn5jk5n4kj5n.jpg"
},
    {
    "url": "http:\/\/www.mywebsite.com\/images\/nj23knk5k5455.jpg",
    "name": "nj23knk5k5455.jpg"
}

Если я сделаю это:

array_push($output, 'http://www.mywebsite.com/images/' . $filename);
array_push($output, $filename);

Я получу вывод, подобный этому:

{
    "0": "http:\/\/www.mywebsite.com\/images\/0Z9O3a9q1k2A8.jpg",
    "1": "0Z9O3a9q1k2A8.jpg",
    "2": "http:\/\/www.mywebsite.com\/images\/3jn5jk5n4kj5n.jpg",
    "3": "3jn5jk5n4kj5n.jpg",
    "4": "http:\/\/www.mywebsite.com\/images\/nj23knk5k5455.jpg",
    "5": "nj23knk5k5455.jpg",
}

Мне нужно, чтобы это было похоже на то, что мне нужно, чтобы я мог разобрать его с помощью jQuery.

Ответы [ 2 ]

1 голос
/ 02 марта 2011

У вас должен быть массив, который вы используете. Так что вместо этого:

$output = array();

$output['url'] = 'http://www.mywebsite.com/images/' . $filename;
$output['name'] = $filename;

Вы бы хотели что-то вроде:

$output = array();

$output[]['url'] = 'http://www.mywebsite.com/images/' . $filename;
$output[]['name'] = $filename;

Это даст вам вывод, который вы затем можете использовать в своем jquery:

success: function(response){
    response[0].name;
    response[0].url;
}

Это имеет смысл? Код jquery очень сокращен.

1 голос
/ 02 марта 2011

Попробуйте:

$output = array();
for($i = 0; $i < $image_count; $i++)
{
    $filename = random(13) . fileExt($_FILES['file']['name'][$i]);

    move_uploaded_file($_FILES['file']['tmp_name'][$i], 'images/' . $filename);

    $output[] = array(
        'url' => 'http://www.mywebsite.com/images/' . $filename,
        'name' => $filename
    );

    $count++;
}

С помощью $output[] = x вы можете добавить запись в массив.Выходные данные выглядят так:

[
  {
    "url": "http:\/\/www.mywebsite.com\/images\/0Z9O3a9q1k2A8.jpg",
    "name": "0Z9O3a9q1k2A8.jpg"
  },
  {
    "url": "http:\/\/www.mywebsite.com\/images\/3jn5jk5n4kj5n.jpg",
    "name": "3jn5jk5n4kj5n.jpg"
  }
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...