С Новым годом! Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/29: Рейтинг темы: голосов - 29, средняя оценка - 4.62
12 / 6 / 1
Регистрация: 17.01.2014
Сообщений: 135

Вызов php метода ajax запросом. Магия или руки не оттуда растут?

14.03.2016, 23:23. Показов 5512. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет) I need your healp)

Проблема с аяксом. То ли я не правильно понимаю принципы работы аякс запросов, то ли задачу не правильно ставлю, или в коде делаю ошибки.

Задача такая, мне нужно аяксом вызывать методы php класса.

Я погуглил нашел решение, причем которое совпадает с тем, как я себе это и представляю, но оно нифига не работает, как надо.

HTML5
1
<p class="upload_file">Отправить</p>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$(function () {
    
    $(".upload_file").click(function () {
        
        uploadFileToImport();
        
    });
    
});
 
 
function uploadFileToImport () {
    
    $.ajax({
        
        url: "import.php",
        data: {action : 'uploadFileToImport'},
        method : 'POST',
        error: function (response) {
            
            $(".status").html(response.status+"<br>"+response.msg);
            console.log ("erwerwe");
        },
        
        success: function (response) {
            
            $(".status").html(response.status+"<br>"+response.msg);
            
            
        },
        
    });
    
}
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class import {
    
    public function __construct() {
        
    }
    
    public function switcher ($action) {
        
        switch ($action) {
            
            case: "uploadFileToImport": 
                 self::uploadFileToImport();
            
        }
        
    }
    
    /**
     * Загружает  файл для импорта каталога
     * @param $filename - путь к файлу на сервере
     * @return boolean
     */
    public static function uploadFileToImport() {
    
        
        
    }
    
        
    
}
 
if (isset($_POST["action"])) {
    
    $import = new import();
    $import->switcher($_POST["action"]);
    
}
При клике должен срабатывать ajax запррос, который в POST передает переменную action, в скрипте эта переменная проверяется, если есть, то вызывается метод switcher, в котором в зависимости от значения вызывается метод класса. Но этого не происходит. $_POST['action'] пуста. Если попробовать в import.php просто тупо ее вывести, ничего не выводится. Я знаю, что ajax работает так - отправляет запрос на сервер XMLHttprequest, получает ответ, выводит. Но на сколько я знаю, им можно ведь и get и post запросы отправлять. Так ли это? Как реализовать то, что мне нужно?

Добавлено через 1 час 48 минут
Какжется я наконец начал догонять. Чтобы получить на странице обработчика переменную пост, нужно, в ajax в колбек функции отлавливать ответ сервера и его выводить. Типа только так можно подменять данные. Но собственно вопрос такой, а как можно регулировать, то что будет содержаться в ответе сервера? Я думал немного по другому. Я думал так - мы отправляем аякс запрос серверу, с какими-то параметрами, например data: {action : 'qwerty'}. И эти данные тупо отправляются на указанную в url страницу. А там мы с ними, что хотим то и делаем. А в respounse, ответ от сервера я думал мы можем из php метода отправить любые данные наз ajax скрипту, написав, например return array("msg" => "запрос прошел удачно").

Объясните, как это работает? Подробнее. Обязательно ли ответом от сервера подменять данные на странице, выводя respounse? И как можно в respounse засунуть например массив с параметрами?

Добавлено через 48 минут
Сейчас в очередной раз читаю статьи про работу ajax http://javascript.ru/ajax/intro . Из всего этого пока понял, что никакими return ответ от сервера не возвращается. В ответ от сервера приходит только то, что мы выводим echo, print_r и тому подобное. То есть если я хочу передать в ответ ajax скрипту массив, то мне нужно написать, как ни странно:

PHP
1
$a = array("param" = > "value"); echo $a;
А я раньше думал, что нужно передавать в return массив.

Довольно непонятная технология. Я просто видел, как в одном движке это все работает именно на return, в Moguta.cms, там это похоже прозрачно реализовано. У них идет функция, которая возвращает массив с ошибкой, и потом в ajax написано, что-то вроде $(".staus").html(response.msg);

Добавлено через 37 минут
И если кто соблаговолит прочитать эту тему, может подскажете, как разбирать в js, массв полученный в ответе от сервера? Обязательно ли это должно быть в формате json?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.03.2016, 23:23
Ответы с готовыми решениями:

Ошибка или руки не оттуда?
Ничего не могу понять... строка вроде инициализирована, при обращении к conn не находит данный объект, в чем может быть причина? P.S....

с запросом insert into или по другому кривые руки
Здравствуйте есть не большая программа работающая с бд access не получается запрос на вставку строки в таблицу с счетчиком ругается вроде...

У программистов из Скайпа руки растут из ж**ы!
У программистов из Скайпа руки растут из ж**ы!!! Вот такие вот дела! Как вам такая картинка. Просто скажите а где кнопка...

5
 Аватар для AmateR62
118 / 118 / 87
Регистрация: 24.02.2014
Сообщений: 404
15.03.2016, 09:33
У вас ошибка в конструкции switch-case, после case не должно быть двоеточия.

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
class import {
    
    public function __construct() {
        
    }
    
    public function switcher ($action) {
        
        $rtr = 100;
 
        switch ($action) {
            
            case "uploadFileToImport": 
                 $rtr = self::uploadFileToImport();
            
        }
        
        return $rtr;
    }
    
    /**
     * Загружает  файл для импорта каталога
     * @param $filename - путь к файлу на сервере
     * @return boolean
     */
    public static function uploadFileToImport() {
    
        return 500;
        
    }
    
        
    
}
 
if (isset($_POST["action"])) {
    
    $import = new import();
    $result = $import->switcher($_POST["action"]);
    
    echo $result;
}
А чем вам json не угодил? Можно написать запрос вот так:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function uploadFileToImport () {
    
    $.ajax({
        
        url: "import.php",
        dataType: 'json',
        data: {action : 'uploadFileToImport'},
        type : 'POST',
        error: function (response) {
            
            $(".status").html(response.param);
 
        },
        
        success: function (response) {
            
            $(".status").html(response.status+"<br>"+response.msg);
            
            
        },
        
    });
    
}
а возвращать массив вот так:

PHP/HTML
1
echo json_encode( array("param" = > "value") );
1
12 / 6 / 1
Регистрация: 17.01.2014
Сообщений: 135
15.03.2016, 10:42  [ТС]
Да, с json разобрался вчера, спасибо) В принципе тема ясна, я просто по другому представлял себе механизм работы ajax. Не знаю, как в Moguta реализован весь этот механизм так прозрачно, но у них сделано все удобно. пишешь что-то вроде:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$(function () {
 
   $('.form_import_excel').ajaxForm({
            type: "PUT",
            url: "ajax",
            cache: false,
            dataType: 'json',
            data: {
                mguniqueurl: "action/uploadFileToImport",
                pluginHandler: 'mg-keys', // плагин для обработки запроса
            },
                        error: function (response) {
 
                        },
                        success: function (response) {
                           
                           admin.indication(response.status, response.msg);
 
                        },
   });
   
});
И все норм, то есть весь этот механизм со switch для вызова нужного метода срыт. Как этот механизм определяет все новые методы, тоже не понятно. Наверно есть какая-то функция, которая создает массив с методами, и оборачивает их в switch. Плюс ответ серверу тоже по-другому сделан. Там в php пишется не echo array(), а return. Поэтому я все это время считал, что ajax получает ответ от сервера через return. Так, сидишь пишешь себе плагины не простые, а оказывается простых вещей и не знаешь) Буду учить.
0
 Аватар для AmateR62
118 / 118 / 87
Регистрация: 24.02.2014
Сообщений: 404
15.03.2016, 10:46
Цитата Сообщение от Maksimus1991 Посмотреть сообщение
как в Moguta реализован весь этот механизм
А вы почитайте статьи, после которых "родилась" Moguta, м.б. там найдете ответ - тырьк (автор разработчик этой cms)
0
12 / 6 / 1
Регистрация: 17.01.2014
Сообщений: 135
15.03.2016, 14:18  [ТС]
Читал) Если честно мое изучение mvc, совместной работы php и ajax, началось именно с с этой cms и этого блога) Спасибо за инфу. Я сейчас хочу сделать скрипт удобный для импорта в базу данных, пока из excel. Делаю на основе PHPExcel. Хочется чтобы была возможность, после загрузки файла, когда нажимаешь импортировать, выбирать, заменить строки или нет, создать новую таблицу или нет, ну и прочие удобства.

Добавлено через 3 часа 25 минут
Может подскажешь еще, как можно одновременно с json строкой, передать на сервер данные из формы, чтобы можно было загрузить файл? А то, если я серриализую данные из формы и пихаю их в json:

JavaScript
1
2
3
dataForm = $(this).serialize();
 
data : {"dataForm" : dataForm, "action" : "action"} // .это в аяксе
То массив $_FILES остается пустым, или я опять же неправильно понимаю принцип сего действия? Массив $_FILES наполняется ведь при отправке формы, так? То есть когда мы делаем отправку формы аяксом, мы отменяем стандартное действие отправки event.preventDefault(); А данные из формы берем методом serialize(), чтобы потом их отправить обработчику. То есть по идее, метод serialize(), должен отправлять обработчику и данные о файле в массив $_FILES. Но уменя почему-то этот массив пустой.
0
 Аватар для AmateR62
118 / 118 / 87
Регистрация: 24.02.2014
Сообщений: 404
15.03.2016, 14:31
Я загружаю файлы с помощью библиотеки ScriptJava. Кстати, у себя на сайте писал как это делаю... правда давно это было, но может быть поможет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.03.2016, 14:31
Помогаю со студенческими работами здесь

Вызов функции гет запросом на ajax jquery
Добрый день. В js полный профан. Подскажите плиз, как вызвать функцию на js гет запросом на ajax jquery, если данные которые нужны...

Получить конкретную php-переменную ajax-запросом
Есть форма для отправки комментариев.. Обработчику отправляются post-данные. возникла необходимость получить их назад в обработанной форме...

Как из index.php достать до переменной сессии ajax запросом?
Доброго дня. Проблема такая: имеется файл index.php, из него делается ajax запрос к файлу ajax.php (имена файлов условные). В файле...

Вызов function в php через ajax
Есть вот такой ajax запрос: var public_key = $('#pb_public_key').val(); $.ajax({ type: &quot;POST&quot;, url: &quot;system/public.php&quot;, ...

Вызов функции php через AJAX
Есть функция: //Whois function whois_by($ip){ include(core_url.'whois/whois.php'); mb_internal_encoding('8bit'); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru