проблема с отправкой ajax-формы в yii

#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’.