I have this very simple project making use of Ajax:
html:
<!DOCTYPE html>
<html lang='en'>
    <head>
        <title>test</title>
        <meta charset='utf-8'>
        <meta name='viewport' content='width=device-width, initial-scale=1.0'>
    </head>
    <body>
        <button id='btn'>Click</button>
        <script src='jquery-3.6.3.min.js'></script>
        <script src='main.js'></script>
    </body>
</html>
main.js:
$('#btn').click(() => {
    $.ajax({
        url: 'test.php',
        type: 'POST',
        dataType: 'json',
        success: res => {
            console.log('success');
            console.log(res);
        },
        error: errorThrown => {
            console.log(errorThrown);
        }
    })
})
and php:
<?php
ini_set('display_errors', 'On');
    error_reporting(E_ALL);
    $executionStartTime = microtime(true);
    $url='http://api.geonames.org/geoCodeAddressJSON?formatted=true&q=Madrid&username=my_user_name&style=full';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_URL,$url);
    $result=curl_exec($ch);
    curl_close($ch);
    $decode = json_decode($result,true);    
    $output['status']['code'] = "200";
    $output['status']['name'] = "ok";
    $output['status']['description'] = "success";
    $output['status']['returnedIn'] = intval((microtime(true) - $executionStartTime) * 1000) . " ms";
    $output['data'] = $decode['address'];
    header('Content-Type: application/json; charset=UTF-8');
    echo json_encode($output);
?>
I have installed Apache2 following that tutorial with the project in /var/www/html/my_project and I have also installed XAMPP following that tutorial with the very same project in /opt/lampp/htdocs/my_project.
When using XAMPP:
sudo service apache2 stop
sudo /opt/lampp/lampp start
and in my browser: localhost/my_project,
the Ajax call works fine.
But when using Apache2:
sudo /opt/lampp/lampp stop
sudo service apache2 start
and in the browser: localhost/my_project,
the Ajax doesn't work and throw the following:
XML Parsing Error: no element found
Location: http://localhost/test/test.php
Line Number 29, Column 1:
as well as:
Object { readyState: 4, getResponseHeader: getResponseHeader(e), getAllResponseHeaders: getAllResponseHeaders(), setRequestHeader: setRequestHeader(e, t), overrideMimeType: overrideMimeType(e), statusCode: statusCode(e), abort: abort(e), state: state(), always: always(), catch: catch(e)
, … }
abort: function abort(e)
always: function always()
catch: function catch(e)
done: function add()
fail: function add()
getAllResponseHeaders: function getAllResponseHeaders()
getResponseHeader: function getResponseHeader(e)
overrideMimeType: function overrideMimeType(e)
pipe: function pipe()
progress: function add()
promise: function promise(e)
readyState: 4
responseText: `<?php\nini_set('display_errors', 'On');\n    error_reporting(E_ALL);\n\n    $executionStartTime = microtime(true);\n\n    $url='http://api.geonames.org/geoCodeAddressJSON?formatted=true&q=Paris,France&username=clovis&style=full';\n    $ch = curl_init();\n    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);\n    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n    curl_setopt($ch, CURLOPT_URL,$url);\n\n    $result=curl_exec($ch);\n\n    curl_close($ch);\n\n    $decode = json_decode($result,true);\t\n\n    $output['status']['code'] = "200";\n    $output['status']['name'] = "ok";\n    $output['status']['description'] = "success";\n    $output['status']['returnedIn'] = intval((microtime(true) - $executionStartTime) * 1000) . " ms";\n    $output['data'] = $decode['address'];\n\n    header('Content-Type: application/json; charset=UTF-8');\n\n    echo json_encode($output);\n?>\n`
setRequestHeader: function setRequestHeader(e, t)
state: function state()
status: 200
statusCode: function statusCode(e)
statusText: "OK"
then: function then(t, n, r)
<prototype>: Object { … }
In both locations, the file permissions are the same. I'd like to understand the issue here.
