Laravel:如何通过Ajax将selectedIndex发送到控制器

时间:2014-02-08 14:47:19

标签: php ajax laravel laravel-3

想要实现什么目标?

在更改选择列表的选择时,控制器选择此selectedIndex,将SQL查询发送给模型,并通过选择列表下的ajax返回结果。在普通的PHP环境中这很容易做到,但我在Laravel环境中感到困惑。

如果不清楚:我想要的是:在Laravel环境中完成http://www.w3schools.com/php/php_ajax_database.asp

更新:我使用了鼬的指示改进了代码:

如果我可以使用简单的Ajax,但建议使用JQUERY / JSON,不知道为什么这不起作用。

<script>        
    function showHint(str)
        {
        if (str.length==0)
          {
          document.getElementById("txtHint").innerHTML="";
          return;
          }
        var xmlhttp=new XMLHttpRequest();
        xmlhttp.onreadystatechange=function()
          {
          if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
            document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
            }
          }
        xmlhttp.open("GET","gethint.php?q="+str,true);
        xmlhttp.send();
        }   

    </script>

然后PHP获取东西等等,会很容易。

所以,JQUERY / JSON会或多或少地像这样,虽然我不知道如何完成它

$('#ajax').submit(function(e){

    $.ajax({
        url: '<?php echo route("hint");?>',
        type: 'POST',
        data: { especialidades: $('especialidades').val() },
        dataType: 'json',
        success: THIS WOULD BE A FUNCTION THAT WOULD PRINT THE RESULTS FROM THE CONTROLLER
         }
    });

    e.preventDefault();
});

我自己的表格看起来像这样:

<form role="form"  class="bg-success" id="ajax">
  <div class="form-group">
<select name ="especialidades" id = "especialidades" class="form-control" onchange="showHint(this.value)">                 
   <?php foreach($data['kategori'] as $detalle): ?>
   <option value="<?php echo $detalle->id_specialty; ?>"><?php echo $detalle->spec_description; ?></option>  
    <?php endforeach;?>
     </select>
   </div>
   </form>
  <div id="txtHint"><b>Person info will be listed here.</b></div>

控制器应如下所示:

class Hint extends BaseController{

    public $restful = true;
    public function post_appajax()
    {
         NEED TO GET THE SELECTED INDEX SENT BY THE JQUERY SCRIPT IN THE VIEW: HOW??   

        SOMETHING EQUAL TO THIS ===> ::json(Input::get('especialidades'));

    }
  }

和路线就像这样:(由鼬)

Route::post('hint', array(
    'as'    =>    'hint',
    'uses'  =>    'Hint@getHint'
));

2 个答案:

答案 0 :(得分:0)

实际上非常简单。

<强> routes.php文件

Route::post('hint', array(
    'as'    =>    'hint',
    'uses'  =>    'HintController@getHint'
));

<强> HintController.php

class HintController extends BaseController {

    public function getHint()
    {
          return Response::json(//whatever you want);
    }
}

查看

$.ajax({
    url: '<?php echo route("hint");?>', //<-------- see this
    type: 'POST',
    data: { especialidades: $('especialidades').val() },
    dataType: 'json',
    success: SEND IT TO THE CONTROLER HOWEVER YOU CAN...
     }
});

休息将由你决定。

答案 1 :(得分:0)

根据控制器中的方法名称,路径应为(Laravel-3:RESTfull controller

Route::post('hint', array( 'as' => 'hint', 'uses' => 'Hint@appajax'));

您的控制器

class Hint extends BaseController{

    public $restful = true;

    public function post_appajax()
    {
        // ...
    }
}