#php #ajax
#php #ajax
Вопрос:
Ниже приведен запрос ajax.
$.post('delete.php', {'deletearray':deletearray, 'dir':dir}, function(deleted, undeleted){
if(undeleted == 0) {
alert('All ' deleted ' files delted from the server');
} else {
alert(deleted ' files deleted and ' undeleted ' files could not be deleted');
}
}, 'json');
и здесь начинается delete.php
<?php
if(isset($_POST['deletearray'])) {
$files = $_POST['deletearray'];
$dir = $_POST['dir'];
$deleted = 0;
$undeleted = 0;
foreach($files as $file) {
if(unlink($dir.$file) amp;amp; unlink($dir.'thumb/'.$file)) {
$deleted ;
} else {
$undeleted ;
}
}
echo json_encode($deleted, $undeleted);
}
return;
?>
При запуске кода файлы удаляются успешно, но сообщение не отображается.
Я также попытался изменить запрос ajax как:
$.post('delete.php', {deletearray:deletearray, dir:dir}, function(deleted, undeleted){
alert("php finished");
}, 'json');
тем не менее, сообщение не отображается. Так что, я думаю, что-то не так в delete.php досье. Пожалуйста, помогите.
Комментарии:
1. Если проблема в PHP, почему бы вам не проверить журнал ошибок? Или консоль javascript тоже!
2. Скорее всего, вы ищете
$_POST['deletearray']
, а не$_POST[deletearray]
.
Ответ №1:
Первым делом-
Используйте $_POST['deletearray']
вместо $_POST[deletearray]
Второе-
Вы не можете возвращать разные переменные из PHP scrtipt, все, что вы там печатаете, возвращается в обратном вызове ajax, поэтому просто напишите это-
PHP
json_encode(array('totalDeleted' => $deleted, 'totalUndeleted' => $undeleted));
AJAX
...
function(response){
response=JSON.parse(response);
console.log(response);
}
Ответ №2:
Лучший способ сделать jquery ajax php следующим образом:
jquery:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">
function do_ajax() {
//set data
var myData = new Array();
myData.push({name:'deletearray',value:'deletearray'});
myData.push({name:'dir',value:'dir'});
//ajax post
$.ajax({
dataType: 'json',
url: 'delete.php',
type: 'post',
data: myData,
success: function(returnData) {
if(returnData.undeleted == 0) {
alert('All ' returnData.deleted ' files delted from the server');
} else {
alert(returnData.deleted ' files deleted and ' returnData.undeleted ' files could not be deleted');
}
}
});
}
</script>
PHP:
<?php
$myData = $_POST;
if(isset($myData['deletearray']) AND isset($myData['dir'])) {
$files = $myData['deletearray'];
$dir = $myData['dir'];
$deleted = 0;
$undeleted = 0;
foreach($files as $file) {
if(unlink($dir.$file) amp;amp; unlink($dir.'thumb/'.$file)) {
$deleted ;
} else {
$undeleted ;
}
}
print(json_encode(array('deleted' => $deleted, 'undeleted' => $undeleted)));
exit();
}
?>
Ответ №3:
Вы должны использовать json_encode
следующее:
json_encode(array('deleted' => $deleted, 'undeleted' => $undeleted));
И вы должны получать переменные с data.undeleted
помощью и data.deleted
$.post('delete.php', {'deletearray':deletearray, 'dir':dir}, function(data) {
if(data.undeleted == 0) {
alert('All ' data.deleted ' files delted from the server');
} else {
alert(data.deleted ' files deleted and ' data.undeleted ' files could not be deleted');
}
}, 'json');
Комментарии:
1. Ваш метод будет работать, должен быть массив.
json_encode($deleted, $undeleted)
был неправ2. Вы правы. только массив возвращается с помощью json. Тем не менее, моя проблема сохраняется.