Javascript 带有局部视图的Laravel 4 ajax
我是几天前开始的拉威尔4的新人。我的问题很简单,我有一个组合框,客户端或用户可以对其进行更改并呈现局部视图 这是我的第一个观点。一旦改变: 将通过javascript呈现该简单消息 我的问题是,如果我手动放置值,它将只显示局部视图: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 这是我在
@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相同