Javascript 带有局部视图的Laravel 4 ajax

Javascript 带有局部视图的Laravel 4 ajax,javascript,php,ajax,laravel,Javascript,Php,Ajax,Laravel,我是几天前开始的拉威尔4的新人。我的问题很简单,我有一个组合框,客户端或用户可以对其进行更改并呈现局部视图 这是我的第一个观点。一旦改变: 将通过javascript呈现该简单消息 我的问题是,如果我手动放置值,它将只显示局部视图: @if($ides!=0) <div id="txtHint"> <b>Person info will be listed here -> {{ $ides }} </b></div> @endif 这是我在

我是几天前开始的拉威尔4的新人。我的问题很简单,我有一个组合框,客户端或用户可以对其进行更改并呈现局部视图

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

将通过javascript呈现该简单消息

我的问题是,如果我手动放置值,它将只显示局部视图:

@if($ides!=0)
<div id="txtHint"> <b>Person info will be listed here -> {{ $ides }} </b></div>
@endif
这是我在控制器中的功能

    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);
}
function stateChanged()
{
   if (xmlHttp.readyState==4)
   {
      document.getElementById("txtHint").innerHTML=xmlHttp.responseText;

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

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

<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>
jquery函数:

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);
}
function stateChanged()
{
   if (xmlHttp.readyState==4)
   {
      document.getElementById("txtHint").innerHTML=xmlHttp.responseText;

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

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

因为您告诉它,若在URL中找到值,那个么只显示部分视图。 这给你带来了麻烦

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>

为了您自己的利益,请使用您的代码:

我将为您提供一种更简单的总体设计方法

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

无论是否使用ajax请求,都返回相同的视图

只要在布局上稍作改动

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

如果请求不是ajax,则返回包含整个模板的视图


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

我知道,问题是我不知道如何避免回答。在视图中执行一些逻辑也是很好的。谢谢你的回答,也许我不理解:\n但是我用你的代码编辑了。你能显示stateChanged函数吗?我做了一些研究,但是我对这个方法有点迷茫。我已经有了一个布局,我可以把这个视图往上看。{{$content}是我的视图,我简单地添加了partialview。我在这方面很新,我已经为此奋斗了很长一段时间。我想做的是通过一个组合框值,我可以在数据库中搜索并使用该数据更新表,而无需刷新页面。有几个关于LaravelAjax的教程,但我发现没有用,或者我不理解。关于这个具体的例子,你能帮我多一点吗。非常感谢您的回答。您在哪一部分面临问题。请准确地告诉我这一部分,以便我的示例更有用。我只想用数据库中的数据更新dropdow的一个div onchange。但是我想使用ajax,我不想刷新页面。我的观点是,它的工作方式与我的相同,但如果用户更改url并添加url+?value=2,例如,它将只显示我的partialview,而不会显示dropdow,因为我的控制器。我一直在搜索angularjs和一些教程,它们有我想做的很好的例子。这很难理解。我想也许有一个简单的方法来做iti,主要是做服务器工作,在客户端,我使用jquery是为了方便我对javascript了解不多:D.jquery是你的一个选项吗?我有一个jquery函数可以工作,但我对控制器的问题与javascript相同