Непонятная работа AJAX

254
28 февраля 2017, 18:42

Не работает простейший ajax запрос. При нажатии на кнопку должно отправляться письмо. При нажатии на кнопку срабатывает первый alert. Далее выскакивает второй alert(data) и он пустой, но при этом обработчик test.php не срабатывает. Не работает как с прямым так и с относительным путем. Помогите, я в отчаянии!

Код

function klikaj() { 
    alert('ok'); 
    var name=3; 
    var phone=6; 
    $.ajax({ 
        url: 'http://exmaple.xyz/test.php', 
        data: {phone:phone, name:name}, 
        type: 'POST', 
        success: function(data){ 
            alert (data); 
        } 
    }); 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Код обработчика
echo $_POST['name'];

mail("milllanikev@gmail.com", "My Subject", "Line 1\nLine 2\nLine 3");

Есть предположение что это из-за единой точки входа расположенной в index.php

if ($_SERVER['REQUEST_URI'] == '/') {
    $Page = 'index';
    $Module = 'index';
} else {
    $URL_Path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
    $URL_Parts = explode('/', trim($URL_Path, ' /'));
    $Page = array_shift($URL_Parts);
    $Module = array_shift($URL_Parts);
    if (!empty($Module)) {
        $Param = array();
        for ($i = 0; $i < count($URL_Parts); $i++) {
            $Param[$URL_Parts[$i]] = $URL_Parts[++$i];
        }
    }
}
if ($Page == 'index') include('page/index.php');
else if ($Page == 'regreg') include('page/regreg.php');
else if ($Page == 'editproject') include('page/editproject.php');
else if ($Page == 'regcom') include('page/regcom.php');
else if ($Page == 'regprofile') include('page/regprofile.php');
else if ($Page == 'addproject') include('page/addproject.php');
else if ($Page == 'delmember') include('page/delmember.php');
else if ($Page == 'addmember') include('page/addmember.php');
else if ($Page == 'account') include('acc/account.php');
else if ($Page == 'search') include('page/search.php');
else if ($Page == 'comm') include('page/comm.php');
else if ($Page == 'mail') include('mail.php');
Answer 1

нужно было прописать в index путь к файлу

else if ($Page == 'test') include('test.php');

А в ajax url: '/test'

Answer 2

Никогда не дебажьте так

alert (data);

всегда дебажьте так

console.log(data);

И смотрите в консоли.

Далее, смотрите в консоли куда уходит ajax и что возвращает. Попробуйте просто напрямую зайти на http://exmaple.xyz/test.php, чтобы убедиться, что запросы попадают туда куда надо, можно в test.php первой строчкой написать return "да это я"; чтобы проверить.

Answer 3

Этот код и не будет работать. Наверняка у вас в консоли браузера пишет $.ajax is not a function. (Консоль браузера открывается по кнопке F12)

Вам сперва надо подключить аякс

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

а затем уже вызывать функции

Впрочем вы не привели коды ошибок, которые у вас в консоли поэтому ответ вам никто внятный не даст.

В файле http://exmaple.xyz/test.php я рекомендую вам для теста весь код закоментить и написать лишь 2 проверочных строчки

<?php
print_r($_POST);
READ ALSO
отличие class от function php

отличие class от function php

здравствуйте, программирую на php без нескольких месяцев год, и пока что не могу точно понят в чём преимущество классов по сравнению с функциями,...

276
Возвращает строку вместо json-объекта

Возвращает строку вместо json-объекта

Есть файл, в котором обрабатываются данные и есть прокси, который написан для для кросс-доменных запросовФайл, в котором обрабатываются данные,...

305
Как прибавить к времени до ровного значения?

Как прибавить к времени до ровного значения?

У меня в системе есть автоматические задачи при изменении статуса клиента, автоматически ставится задача у которой есть значение "выполнить...

192
Вывод таблицы в 3 колонки

Вывод таблицы в 3 колонки

Хочу вывести таблицу с данными в 3 колонки - не получаетсяПрошу помочь

255