Когда пользователь нажимает кнопку «Загрузить», он успешно создает zip-файл на сервере с файлами, затем он должен предупредить местоположение zip-файлов (переменная $ zip) из php в качестве ответа, но вместо этого он отправляет предупреждение [объект Object]. Все остальное работает так, как должно. Что я делаю неправильно?
JQuery:
$('.download').click(function() {
window.keys = [];
$('.pad').each(function(i, obj) {
var key = $(this).attr('key');
keys.push(key)
});
var jsonString = JSON.stringify(keys);
$.ajax({
type:'post',
url:'download.php',
data: {data : jsonString},
cache: false,
dataType: 'json',
success: function(data){
alert(data);
}
});
});
PHP:
<?php$data = json_decode(stripslashes($_POST['data']));
$numbercode = md5(microtime());
$zip = new ZipArchive();
$zip->open('kits/'.$numbercode.'.zip', ZipArchive::CREATE);
foreach($data as $d) {
$zip->addFile($d);
}
$zip->close();echo json_encode($zip);
?>
Возвращаемый тип — это объект JavaScript, результатом которого будет то, что вы видите.
Во-первых, вы должны console.log(data)
, чтобы получить структуру. Вы также можете сделать это, посмотрев вкладку «Сеть» в Chrome.
После того, как вы знаете структуру data
Вы можете использовать значение.
Например, тогда alert(data.location)
, чтобы предупредить фактическое значение.
удалить свой dataType
из ajax, он предупреждает [Object Object], потому что ваш результат становится объектом json, если вы укажете dataType: 'json',
,
и в php-
// to echo the location of the zipfile
echo 'kits/'.$numbercode.'.zip';
Благодаря @ jake2389 я вижу, что я делаю неправильно, мне просто нужно было создать в PHP новую переменную, которую я назвал $ link, с данными, которые я хотел отправить обратно в AJAX, потому что $ zip был определен как zip-архив, а не строка , Вот что я изменил, и теперь это работает.
PHP:
<?php$data = json_decode(stripslashes($_POST['data']));
$numbercode = md5(microtime());
$zip = new ZipArchive();
$zip->open('kits/'.$numbercode.'.zip', ZipArchive::CREATE);
foreach($data as $d) {
$zip->addFile($d);
}
$zip->close();
$link = 'kits/'.$numbercode.'.zip';
echo json_encode($link);
?>