#javascript #php #jquery #ajax #yii
#javascript #php #jquery #ajax #yii
Вопрос:
Я создаю виджет для использования на веб-сайте, чтобы «найти» совпадение в любом поле базы данных. В настоящее время я использую диалоговое окно jQuery и хочу отправить форму, перенаправить форму на контроллер / действие (я использую yii, который использует модель MCV) и возвращаю вывод этой функции в текущее окно.
В настоящее время я использую скрытый div и функцию загрузки jquery.
$("#find_results").load(loadPage, function(){
}).show();
который вызывает функцию, которая делает это по существу:
public function actionFind(){
if (!empty($_POST)){
//do really big query
//put results into <tr> and <td> tags using a for loop
}else{
echo <tr><td>"no results found"</td></tr>;
}
}
этот код возвращает выходные данные, но только «результаты не найдены», что наводит меня на мысль, что форма на самом деле никогда не публикуется.
кто-нибудь знает, что за черная магия здесь творится??
Спасибо!
Постскриптум
Диалоговое окно представляет собой частичное представление, которое содержит форму, которая должна быть отправлена с действием / контроллером / поиском
обновленный:
Вместо этого я реализовал это: новая ошибка — «неопределенный индекс: findtext», который является именем моего текстового ввода.
$("#find_results").load(loadPage,{ data: $("#find_form").serialize() },function(data){
console.log(data);
$('#find_results').html(data);
$(this).show();
});
Комментарии:
1. » Я создаю виджет для использования на веб-сайте, чтобы»найти» совпадение в любом поле базы данных». будьте очень осторожны, чтобы не раскрыть информацию о вашей схеме базы данных потенциальным злоумышленникам. Подобная функция может быть довольно опасной 😉
Ответ №1:
Сначала давайте посмотрим на подпись для .load()
.load( url [, data ] [, complete ] )
url
Тип: Строка
Строка, содержащая URL-адрес, на который отправляется запрос.
данные
Тип: PlainObject или String
Простой объект или строка, которая отправляется на сервер с запросом.
завершить
Тип: Функция ( строка responseText, Строка textStatus, jqXHR jqXHR)
Функция обратного вызова, которая выполняется при завершении запроса.
Итак, если вы хотите отправить данные на сервер, вы должны сделать что-то вроде:
$("#find_results").load(loadPage, {someKey: 'some value'}, function(){
$(this).show();
});
Теперь, когда мы отправляем данные, неважно, что я говорил раньше о $_GET
Из документов:
Метод запроса
Метод POST используется, если данные предоставляются как объект; в противном случае предполагается GET .
Кроме того, поскольку вы отметили yii
, вам может потребоваться $_POST
другой доступ к вашему приложению, что-то вроде этого:
public function actionFind( ){ // pass in $request from your app
$request = Yii::$app->request;
if (!empty( $request->post() )){ // change this
//do really big query
//put results into <tr> and <td> tags using a for loop
}else{
echo <tr><td>"no results found"</td></tr>;
}
}
См. Окончательное руководство по Yii 2.0, в котором говорится следующее:
$request = Yii::$app->request;
$post = $request->post();
// equivalent to: $post = $_POST;
$id = $request->post('id');
// equivalent to: $id = isset($_POST['id']) ? $_POST['id'] : null;
Комментарии:
1. хм, я попытался изменить его на get, но он все еще не отправлен, должен ли я как-то связать это, чтобы он отправлял, а затем получал? Я думаю, что то, что я здесь делаю, это просто перенаправление с использованием AJAX и загрузка на страницу, но поскольку форма, похоже, никогда не отправлялась в первую очередь, она просто пропускает раздел кода, содержащий мой запрос,
2. Куда именно вы звоните
actionFind()
? Кроме того, если вы укажетеvar_dump($_GET)
прямо передif (!empty($_GET))
, каков ответ?3. @Andy поскольку вы используете
yii
, пожалуйста, ознакомьтесь с моим обновлением выше4. var_dump возвращает массив (0) { }
5. и actionFind — это функция в контроллере, поэтому она привязана к атрибуту формы ‘action’.