【问题标题】:Laravel 4 ajax with partial views带有部分视图的 Laravel 4 ajax
【发布时间】:2014-03-30 20:26:58
【问题描述】:

我是几天前开始使用 laravel 4 的新手。我的问题很简单,我有一个组合框,客户端或用户更改并呈现“部分”视图。

这是我的第一个观点。改变:

将通过 javascript 呈现该简单消息

我的问题是,如果我“手动”放置值,它只会显示部分视图:

这是我在控制器中的功能

    public function getTeste1() {
    $id = Input::get('value');
    if($id=="")
    {
        $this->layout->content = View::make('home.user');
    }
    else
    {
        $this->layout->content = View::make('home.user2')->with('ides',$id);
    }
}

这是我的 javascript 函数:

function showCustomer(str)
{
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null)
{
alert ("Your browser does not support AJAX!");
return;
}
var url="";
url="?value="+str;
//url=url+"&sid="+Math.random();
// alert(url);
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(true);
}

这是我的看法:

<h1>Home</h1>

<p>Welcome to your Home. You rock!</p>

<form>
<select name="users" onchange="showCustomer(this.value)">
<option value="0">Select a person:</option>
<option value="1">Peter Griffin</option>
<option value="2">Lois Griffin</option>
<option value="3">Glenn Quagmire</option>
<option value="4">Joseph Swanson</option>
</select>
</form>
<div id="txtHint"></div>

这是我的部分观点:

@if($ides!=0)
<div id="txtHint"> <b>Person info will be listed here -> {{ $ides }} </b></div>
@endif

我知道我为什么会遇到这个问题,如果你们知道这将非常有帮助,或者其他方式去做的话,我不知道如何避免它。

谢谢,

贡萨洛·莫拉

编辑: 如果我使用您的解决方案,它将显示如下:

StateChanged 函数:

function stateChanged()
{
   if (xmlHttp.readyState==4)
   {
      document.getElementById("txtHint").innerHTML=xmlHttp.responseText;

      // alert(document.getElementById("txtHint").innerHTML);

   }
}

jquery函数:

<script>
$(document).ready(function() {
$("#users").change(function() {
  $.get('http://localhost/LoginProject/public/home/teste1?value=' + $(this).val(),         function(data) {
    $("#txtHint").html(data);
  });
});
});
</script>

【问题讨论】:

  • 你能显示stateChanged函数吗?

标签: javascript php ajax laravel


【解决方案1】:

我会给你一个更简单的整体设计方法。

你不需要触摸控制器中的任何东西。

无论有无 ajax 请求,都返回相同的视图。

只需对布局稍作改动即可。

@if(!Request::ajax())
<html>
....
.... //the whole layout
</html>
@else
{{$content}}
@endif

简单的逻辑。

如果请求不是 ajax,则返回带有整个模板的视图。

如果请求是ajax,则只返回视图。

【讨论】:

  • 我做了一些研究,但我对这种方法有点迷失了。我已经有了一个布局,我更新了那个视图。 {{ $content }} 它是我的视图,我简单地添加了部分视图。我对此很陌生,我已经为此苦苦挣扎了很长一段时间。我想要做的是通过一个组合框值,我可以在我的数据库中搜索并使用该数据更新表而无需刷新页面。有几个关于 laravel ajax 的教程,但我发现没有用,或者我不明白。对于这个具体的例子,你能为我提供更多帮助吗?非常感谢您的回答。
  • 您在哪一部分遇到了问题。准确告诉我那部分,以便我的示例更有用。
  • 我只想用我的数据库中的数据更新该下拉菜单的 div onchange。但我想使用 ajax 我不想刷新页面。我的观点是它按照我的方式工作,但是如果用户更改 url 并添加“url”+“?value=2”,例如它只会显示我的部分视图,并且不会因为我的控制器而显示 dropdow。我一直在寻找 angularjs 和一些教程,他们有很好的例子,我想做什么。很难理解。我想也许有一个简单的方法来做到这一点
  • 我主要做服务器工作,在客户端,为了方便起见,我使用 jquery(我不太了解 javascript):D。 jquery 适合你吗?
  • 我有一个可以工作的 jquery 函数,但我的控制器仍然遇到与 javascript 相同的问题
【解决方案2】:

因为如果在 URL 中找到 value,您会告诉它仅显示部分视图。
这给你带来了麻烦

if($id=="")
{
    $this->layout->content = View::make('home.user');
}
else
{
    $this->layout->content = View::make('home.user2')->with('ides',$id);
}


将您的控制器方法更改为此。

public function getTeste1()
{
    $id = Input::get('value', null);

    $this->layout->content = View::make('home.user')->with('id', $id);
}

然后查看这个

<h1>Home</h1>

<p>Welcome to your Home. You rock!</p>

<form>
    <select name="users" onchange="showCustomer(this.value)">
        <option value="0">Select a person:</option>
        <option value="1">Peter Griffin</option>
        <option value="2">Lois Griffin</option>
        <option value="3">Glenn Quagmire</option>
        <option value="4">Joseph Swanson</option>
    </select>
</form>

<div id="txtHint">
    @if ($id)
        show detail without AJAX call. Since ID is in URL, you can get the info directly
    @else
        show info that this container will hold some data after AJAX call
    @endif
</div>

并且为了你自己的利益打算你的代码:)

【讨论】:

  • 我知道,问题是我不知道如何避免它
  • 检查答案。在视图中做一些逻辑也是很好的。
  • 感谢您的回答,也许我不明白:\ 但我使用您的代码进行了编辑。
猜你喜欢
  • 1970-01-01
  • 2014-08-31
  • 2012-06-22
  • 1970-01-01
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-12
相关资源
最近更新 更多