#javascript #php #jquery #ajax #synology
#javascript #php #jquery #ajax #synology
Вопрос:
Был бы признателен за помощь. Проверил другие сообщения, похожие на этот заголовок, но недостаточно конкретные.
Я пытаюсь реализовать ajax-вызов php-скрипта на Synology DS415play под управлением DSM 6.2.3-25426 Update 2. Я следую приведенным здесь инструкциям: https://www.digitalocean.com/community/tutorials/submitting-ajax-forms-with-jquery , используя три файла: index.html , form.js и process.php
Однако вызов ajax в form.js сбой со следующими консольными сообщениями:
VM322:1 POST http://192.168.7.20/~user/process.php 500 (Internal Server Error)
VM322:1 XHR failed loading: POST "http://192.168.7.20/~user/process.php"
Сетевой журнал показывает следующее:
Request URL: http://192.168.7.20/~user/process.php
Request Method: POST
Status Code: 500 Internal Server Error
Remote Address: 192.168.7.20:80
Referrer Policy: strict-origin-when-cross-origin
**Response Headers**
Accept-Ranges: bytes
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 1696
Content-Type: text/html
Date: Wed, 04 Nov 2020 23:44:21 GMT
ETag: "cfa-5ae3c755f3d80"
Keep-Alive: timeout=20
Last-Modified: Tue, 01 Sep 2020 08:39:34 GMT
Server: nginx
Vary: Accept-Encoding
**Request Headers**
Accept: application/json, text/javascript, */*; q=0.01
Accept-Encoding: gzip, deflate
Accept-Language: en-GB,en-US;q=0.9,en;q=0.8
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 5
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Cookie: stay_login=0; id=c6OiV4GQDLu86y7E3yfyJTNHdambIB1thxRyeiDnDjgBrXSdBh25Lw2pbbJDQo1WGppdrfrFrm208MiUZ0HfCw; smid=WFXk4Mx31ghEHii0PVWGAsbNsHnd3uBl-toxQM3_VofCuY-KKq5EdnvNq6V7PojMcNxbWVUwQ78s7DKHui-2rA
DNT: 1
Host: 192.168.7.20
Origin: http://192.168.7.20
Pragma: no-cache
Referer: http://192.168.7.20/~user/
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36
X-Requested-With: XMLHttpRequest
Form Dataview sourceview URL encoded
Здесь находятся три исходных файла (все они хранятся в папке user / www):
index.html
<!doctype html>
<html>
<head>
<title>Look I'm AJAXing!</title>
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css"> <!-- load bootstrap via CDN -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> <!-- load jquery via CDN -->
<script src="form.js"></script> <!-- load our javascript file -->
</head>
<body>
<div class="col-sm-6 col-sm-offset-3">
<h1>Processing an AJAX Form</h1>
<!-- OUR FORM -->
<form action="process.php" method="POST">
<!-- NAME -->
<div id="name-group" class="form-group">
<label for="name">Name</label>
<input type="text" class="form-control" name="name" placeholder="Henry Pym">
<!-- errors will go here -->
</div>
<button type="submit" class="btn btn-success">Submit <span class="fa fa-arrow-right"></span></button>
</form>
</div>
</body>
</html>
form.js
$(document).ready(function() {
// process the form
$('form').submit(function(event) {
// get the form data
var formData = {
'name' : $('input[name=name]').val()
};
// process the form
$.ajax({
type : 'POST', // define the type of HTTP verb we want to use (POST for our form)
url : 'process.php', // the url where we want to POST
data : formData, // our data object
dataType : 'json', // what type of data do we expect back from the server
encode : true
})
// using the done promise callback
.done(function(data) {
// here we will handle errors and validation messages
if ( ! data.success) {
// handle errors for name ---------------
if (data.errors.name) {
$('#name-group').addClass('has-error'); // add the error class to show red input
$('#name-group').append('<div class="help-block">' data.errors.name '</div>'); // add the actual error message under our input
}
} else {
// ALL GOOD! just show the success message!
$('form').html('<div class="alert alert-success">' data.message '</div>');
}
})
// using the fail promise callback
.fail(function(data) {
//Server failed to respond - Show an error message
$('form').html('<div class="alert alert-danger">Could not reach server, please try again later.</div>');
});
// stop the form from submitting the normal way and refreshing the page
event.preventDefault();
});
});
process.php
<?php
$errors = array(); // array to hold validation errors
$data = array(); // array to pass back data
// validate the variable
if (empty($_POST['name']))
$errors['name'] = 'Name is required.';
// if there are any errors in our errors array, return a success boolean of false
if ( ! empty($errors)) {
// if there are items in our errors array, return those errors
$data['success'] = false;
$data['errors'] = $errors;
} else {
// show a message of success and provide a true success variable
$data['success'] = true;
$data['message'] = 'Success!';
}
// return all our data to an AJAX call
echo json_encode($data);
Есть идеи, почему я получаю внутреннюю ошибку сервера?
С уважением, Андрей
Комментарии:
1. Это может быть пространство в
! empty($errors)
2. Часто ошибка 500 является синтаксической ошибкой в вашем PHP-коде, вы должны проверить журналы ошибок сервера, у вас может быть причина.. @KooiInc пространство там не должно иметь значения (даже если оно немного уродливое)
3. Было бы полезно, если бы вы могли показать параметры вашего запроса из сетевого журнала, также попробуйте удалить все из файла PHP и вернуть что-то простое, это позволит убедиться, что проблема где-то в вашем коде, тогда мы сможем отлаживать PHP построчно
4. У вас консоль показывает ошибку? Это может быть по причинам политики CORS
5. Спасибо за все предложения, но по-прежнему безуспешно. Сейчас я работаю с минимальным файлом PHP, который не принимает параметров и просто возвращает текстовую строку. Мне удалось найти журналы apache (не журналы Synology PHP) и найти «[путь] не в настроенном docroot». Но установка doc_root в настройках PHP веб-станции (core) не имеет никакого эффекта. Есть предложения?