Теперь я задаю этот вопрос после огромных усилий по поиску решения. Я знаю, что есть много одинаковых вопросов, но ни один из них не помог мне, у меня есть три основных файла: index.html
, main.js
и func.php
, все они в том же каталоге в XAMPP/htdocs/
я работаю на локальном компьютере «XAMPP», теперь основная проблема в том, что когда я пытаюсь получить данные из файла php с помощью вызова AJAX, он возвращает весь необработанный код php, я пробовал чтобы сделать файлы настолько минималистичными для целей тестирования. и когда я пытаюсь запустить файл php из браузера, он работает нормально
индекс.html:
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<meta name = "viewport" content = "width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action = "" method = "get">
<select name = "course" id = "courses">
<option disabled selected>select course</option>
</select>
</form>
<script src = "jquery.min.js"></script>
<script src = "main.js"></script>
</body>
</html>
основной.js:
$(document).ready(function() {
$.ajax({
url: "func.php",
method: "GET",
success: function(data) {
console.info(data);
},
error: function (x, y, z) {
console.error(x);
console.error(y);
console.error(z);
}
});
});
func.php:
<?php
$data = [["id" => "1", "name" => "html"],["id" => "2", "name" => "css"]];
echo json_encode($data);
Возврат: но он пришел из success
, а не из-за ошибки:
<?php
$data = [["id" => "1", "name" => "html"],["id" => "2", "name" => "css"]];
echo json_encode($data);
Я пытался положиться на Gemini в поиске решения, поэтому я попробовал довольно много решений, и большинство из них я сделаю сейчас, большинство из них я сейчас проверю.
Первая попытка: in main.js jQuery AJAX call
Я попытался изменить это так:
$(document).ready(function() {
$.ajax({
url: "func.php",
data: {func: "get_data"},
dataType: "json",
type: "GET",
success: function(data) {
console.info(data);
},
error: function (x, y, z) {
console.error(x);
console.error(y);
console.error(z);
}
});
});
но, к сожалению, это didn't work
и ответ был:
readyState: 4
responseText: "<?php\r\n ob_start();\r\n header('Content-type: application/json; charset=UTF-8');\r\n\r\n $data = [[\"id\" => \"1\", \"name\" => \"html\"],[\"id\" => \"2\", \"name\" => \"css\"]];\r\n ob_end_clean();\r\n ob_end_flush();\r\n\r\n echo json_encode($data);\r\n "
status: 200
statusText: "OK"
parsererror
main.js:13 SyntaxError: Unexpected token '<', "<?php
"... is not valid JSON
Вторая попытка: на этот раз с первыми изменениями я попытался изменить файл func.php
следующим образом:
<?php
ob_start();
header('Content-type: application/json; charset=UTF-8');
$data = [["id" => "1", "name" => "html"],["id" => "2", "name" => "css"]];
ob_end_clean();
ob_end_flush();
echo json_encode($data);
exit();
но it didn't work also
с тем же ответом
Я также пытался использовать CDN для jQuery, но это не сработало.
Я действительно сейчас расстроен и не знаю, что еще попробовать. Если бы вы могли мне помочь, я был бы очень признателен.
Убедитесь, что 1) вы используете правильный веб-сервер и получаете доступ к HTML-файлу через http://localhost/index.html
в своем браузере (при условии, что вы тестируете это на своем локальном компьютере), 2) что на вашем веб-сервере установлен PHP и 3) ваш файл имеет расширение .php
. Надеюсь, 2 и 3 рассмотрены, поскольку вы говорите, что файл называется func.php, и вы сказали, что установили XAMPP. Итак, я предполагаю, что 1) проблема.
Обратите внимание, что это не имеет ничего общего с jquery или ajax. Полагаю, вы получите тот же эффект, когда вручную перейдете по адресу func.php
в браузере. Так что JavaScript, jQuery, Ajax, HTML... не имеют к этому никакого отношения.
when I try to run the php file from the browser it works fine
... Я предполагаю, что вы получили к нему доступ через другой URL-адрес, отличный от того, который пытается использовать код AJAX. Также используйте инструмент «Сеть» браузера, чтобы просмотреть полный URL-адрес, созданный браузером для запроса AJAX. Затем вы можете сравнить и сопоставить URL-адреса в каждом случае.
ADyson, пожалуйста, напишите последний комментарий в качестве ответа, чтобы я мог проверить, что это правильный ответ, на удивление ответ был просто использовать локальный хост, а не работающий сервер, прямо сейчас я чуть не умер, смеясь над собой, как решение было таким простым и Мне потребовалось около 4 дней, чтобы осознать это, спасибо от всего сердца
Да, сервер VS Code Live не поддерживает PHP, вы не можете его использовать. (Ну, технически вы можете, но я бы не советовал. Apache гораздо надежнее)
ты прав, я такой глупый, я не думал об этом
@ Ахмед, не волнуйся, это на удивление распространенная ошибка - я думаю, по крайней мере один человек каждую неделю пишет здесь с одной и той же проблемой. Я не думаю, что документация VS Code хорошо объясняет, что она поддерживает, а что нет.
Убеждаться
вы используете правильный веб-сервер и получаете доступ к HTML-файлу через http://localhost/index.html в своем браузере (при условии, что вы тестируете это на своем локальном компьютере),
что на вашем веб-сервере установлен PHP и
ваш файл имеет расширение .php.
Надеюсь, 2) и 3) рассмотрены, поскольку вы говорите, что файл называется func.php, и вы сказали, что установили XAMPP. Итак, я предполагаю, что 1) проблема.
Если вы используете что-то вроде живого сервера Visual Studio Code, который не поддерживает PHP — хотя некоторые люди сообщают об успешном достижении этого путем добавления некоторых плагинов (см. Как настроить живой сервер vscode для правильной обработки файлов php ( Я использую Win10 и Chrome). Apache (который вы получаете с XAMPP), вероятно, будет лучшим выбором, поскольку он имеет хорошую поддержку PHP и более точно отражает среду, в которой в конечном итоге будет работать ваш PHP-код, если вы развернул его на реальном веб-сайте.
Если PHP-код просто возвращается в исходном виде (что означает, что он не выполняется), то само собой разумеющееся изменение PHP-кода не поможет! Аналогично, добавление
dataType: "json"
в AJAX тоже не поможет, потому что необработанный PHP-код — это не JSON!I also tried to use a CDN for the jQuery
...почему? Часть jQuery, очевидно, работает, иначе она не запускала бы код AJAX. Я могу ошибаться, но похоже, что вы делаете много случайных предположений, вместо того, чтобы внимательно рассмотреть основной факт ситуации.