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

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

14.03.2016, 23:23. Показов 5566. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru