【问题标题】:Onclick Action in YiiYii 中的 Onclick 操作
【发布时间】:2015-02-25 13:06:32
【问题描述】:

我对 Yii 完全陌生,即使看起来微不足道,我也需要帮助。我有一个页面,我从我的数据库生成一个表,我添加了一个搜索选项,我还需要将结果生成为一个表。

问题是当我点击按钮时没有任何反应。 我也尝试过使用提交,但没有成功。

这是我的代码:

...views/supermarkets/index.php:

<?php
use yii\helpers\Html;
use yii\widgets\LinkPager;
use app\views\supermarkets\search;
?>
<h1>Supermarkets</h1>
<ul>

<p> 

    Search by Name

</p>

<INPUT TYPE = "Text" VALUE ="" NAME = "searchname">

<button onclick="myFunction($_POST['searchname'])">Search</button>
<h3> </h3>


<?php
    $array = (array) $supermarkets;

function myFunction($sname){
if (isset($sname) && $sname!='') {


    $row = Yii::app()->db->createCommand(array(
    'select' => '*',
    'from' => 'supermarkets',
    'where' => array('like', 'Name','%'.$sname.'')

))->queryRow();

$array = (array) $row;

    }
    echo $array;
    $this->render('index',array('supermarkets' => $array));
    }


function build_table($array){

    // start table

    $html = '<table class="altrowstable" id="alternatecolor">';

    // header row

    $html .= '<tr>';

    foreach($array[0] as $key=>$value){

            $html .= '<th>' . $key . '</th>';

        }

    $html .= '</tr>';

    // data rows

    foreach( $array as $key=>$value){

        $html .= '<tr>';

        foreach($value as $key2=>$value2){

            $html .= '<td>' . $value2 . '</td>';

        }

        $html .= '</tr>';

    }

    // finish table and return it

    $html .= '</table>';

    return $html;

}



echo build_table($array);

?>


<?= LinkPager::widget(['pagination' => $pagination]) ?>

即使在调试中它也不会通过 myFunction。请问有什么建议吗?

【问题讨论】:

  • 您是从客户端脚本(Javascript)调用服务器脚本(PHP)?这有意义吗?请阅读一些基础教程
  • 很抱歉,我已经提到我对这个完全陌生,我不知道 javascript,你能告诉我怎么做吗?

标签: php model-view-controller yii onclick


【解决方案1】:

您应该遵循正确的 Yii 语法,即在控制器中定义您的函数并通过在 index.php 或其他视图文件上创建按钮来调用该函数,例如:

查看文件上的按钮:

<?= Html::a('Search', ['search-function', 'Name' => $this->$sname], ['class' => 'btn btn-success']) ?>

在你的控制器中:

//当你定义你的函数时

public function actionSearchFunction($sname){
if (isset($sname) && $sname!='') {
    $row = Yii::app()->db->createCommand(array(
    'select' => '*',
    'from' => 'supermarkets',
    'where' => array('like', 'Name','%'.$sname.'')

))->queryAll();

$array = (array) $row;

【讨论】:

    【解决方案2】:

    我会一步一步地向你解释。首先,请注意&lt;?php ?&gt; 标签内的所有内容都将在在呈现视图之前在服务器上生成。因此,您无法在客户端上执行 php 代码。如果您需要从客户端执行一些服务器代码,您需要使用 Ajax(异步 JavaScript 和 XML)。我建议你学习 ajax,因为这在 web 应用程序中非常有用。好的,让我们解决您的问题。第一步是定义一个按钮点击事件。你已经有myFunction,我把它改成这样:

    <button onclick="myFunction();">Search</button>
    

    我将您的输入更改为:

    <input type="text" value ="" name="searchname", id="searchname">
    

    现在,我在&lt;script&gt;&lt;/script&gt; 标签中写myFunction() 正文:

    <script>
        function myFunction()
        {
            $.ajax({
                url: '<?php echo Yii::app()->baseUrl . '/supermarkets/sample' ?>',
               type: 'post',
               data: {searchname: $("#searchname").val()},
               success: function (data) {
                  alert(data);
    
               }
    
          });
        }
    </script>
    

    现在,您需要在控制器中为 ajax 请求定义一个操作。我想你有SupermarketsController。尝试像这样在其中写actionSample()

    public function actionSample()
    {
       $array = (array) $supermarkets;
       $sname = $_POST['searchname'];
       ...
       echo "ok";
    }
    

    您可以在该函数中访问搜索输入值,并且您的所有 php 代码都必须在那里。在该操作的最后一行,您必须回显某些内容(数据或消息)。您在 echo 之后放置的所有内容,您都可以将其作为 success ajax 请求事件的 data 参数获取。在我的示例中,您将在浏览器中看到“ok”警报。我希望我的解释可以帮助你学习ajax。请注意,您需要包含用于使用 ajax 的 jquery 库。祝朋友好运:)

    【讨论】:

    • @Rabah Hamzah 你试过我的解决方案了吗?
    • 是的,很抱歉回复晚了,但我收到此错误:Call to undefined method Yii::app() on url: '基本网址。 '/supermarkets/sample' ?>',
    • @Hamed 非常感谢您花时间和精力帮助我理解我的问题,我会尽力解决它,非常感谢 :)
    • 我通过使用 $app 解决了这个错误,但是当我点击搜索按钮并且在调试中它没有通过 actionSample 时仍然没有任何反应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 2021-07-31
    • 2020-02-17
    • 1970-01-01
    相关资源
    最近更新 更多