im new с laravel 4 началось несколько дней назад. Моя проблема проста, у меня есть combobox, который клиент или пользователь меняет и отображает «частичное» представление.
это мой первый взгляд. По изменению:
сделает это простое сообщение через 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
Я знаю, почему у меня есть эта проблема, я не знаю, как ее избежать, если вы, ребята, знаете, что это будет очень полезно или другое, чтобы это сделать.
Спасибо,
Гонсало Мура
EDITED: если я использую ваше решение, он будет выглядеть следующим образом:
Функция 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>
я дам вам более простой подход к общему дизайну.
вам не нужно ничего касаться в контроллере.
возвращает один и тот же вид для обоих с или без запроса ajax.
просто сделайте небольшое изменение в макете.
@if(!Request::ajax()) <html> .... .... //the whole layout </html> @else {{$content}} @endif
простая логика.
если запрос не является ajax, верните представление со всем шаблоном.
если запрос ajax, верните только представление.
Потому что вы говорите ему показывать только частичное представление, если value
найдено в 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>
И намеревайтесь свой код, для вашего же блага 🙂