【问题标题】:trouble submitting ajax form in yii在 yii 中提交 ajax 表单时遇到问题
【发布时间】:2016-10-14 11:43:21
【问题描述】:

我正在创建一个用于网站的小部件,以在数据库的任何字段中“查找”匹配项。我目前正在使用 jQuery“对话框”框,并希望提交表单,将表单重定向到控制器/动作(我使用的是使用 MCV 模型的 yii),并将该函数的输出返回到当前窗口.

我目前正在使用隐藏的 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>;
    }
}

此代码返回一个输出,但只是“未找到任何结果”,这让我相信表单实际上从未发布过。

有谁知道这里发生了什么黑魔法??

谢谢!

附言

对话框是一个局部视图,其中包含要通过操作 /controller/find 提交的表单

更新:

我实现了这个:新错误是“未定义索引:findtext”,这是我的文本输入的名称。

$("#find_results").load(loadPage,{ data: $("#find_form").serialize() },function(data){
         console.log(data);
         $('#find_results').html(data);
         $(this).show();
});

【问题讨论】:

  • "我正在创建一个用于网站的小部件,以便在数据库的任何字段中“查找”匹配项。" 请非常小心,不要无意中泄露有关您的数据库架构给潜在的攻击者。像这样的功能可能非常危险;)

标签: javascript php jquery ajax yii


【解决方案1】:

首先,让我们看看signature for .load()

.load( url [, data ] [, complete ] )

网址

类型:字符串

包含请求发送到的 URL 的字符串。

数据

类型:PlainObject 或 String

随请求发送到服务器的普通对象或字符串。

完成

类型:函数(String responseText, String textStatus, jqXHR jqXHR)

请求完成时执行的回调函数。

所以,如果你想向服务器发送数据,你可以这样做:

$("#find_results").load(loadPage, {someKey: 'some value'}, function(){
          $(this).show();
});

现在,我们正在发送数据,别管我之前说的$_GET

来自the docs:

请求方法

如果数据作为对象提供,则使用 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>;
    }
}

请参阅The Definitive Guide to 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;

【讨论】:

  • 嗯,我尝试将其更改为 get 但仍未提交,我是否必须以某种方式链接它以便提交然后获取?我认为我在这里所做的只是使用 AJAX 重定向并在页面中加载,但由于表单似乎从未被首先提交,它只是跳过了包含我的查询的代码部分,
  • 你在哪里打电话给actionFind()?另外,如果你把var_dump($_GET) 放在if (!empty($_GET)) 前面,会有什么反应?
  • @Andy 因为你使用的是yii,请看我上面的更新
  • var_dump 返回数组 (0) { }
  • 并且 actionFind 是控制器中的一个函数,因此它附加到表单的 'action' 属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
  • 1970-01-01
  • 1970-01-01
  • 2021-05-13
  • 1970-01-01
相关资源
最近更新 更多