2017-02-10 121 views
0

我通过将变量传递给ajax并在控制器中使用它来将数据保存到数据库中。Laravel不返回页面

保存工作正常,它将数据保存到数据库中,但问题是显示保存的页面。数据库有2个字段,名称和html。名称显然是网站的名称,而html是纯粹的html代码。因此,当用户保存页面名称“随机”我想用本地主机/随机

错误消息我得到的是显示HTML页面,他说:

试图获得的非对象(View属性:C :\ XAMPP \ htdocs中\ fyproject \资源\意见\布局\ website.blade.php)

这是我迄今所做的:

阿贾克斯:

var web_name; 
function updateDatabase(newCode, name_website) 
{ 
    code2 = document.getElementById("content-link2").innerHTML; 
    web_name = ($('#website_name').val()); 
    // make an ajax request to a PHP file 
    // on our site that will update the database 
    // pass in our lat/lng as parameters 
    $.post('http://localhost/template', { 
      _token: $('meta[name=csrf-token]').attr('content'), 
      newCode: (code2), 
      name_website: (web_name), 
     }) 
     .done(function() { 
     }) 
     .fail(function() { 
      alert("error"); 
     }); 
} 

控制器:

 public function postDB(Request $request) { 
     $newName = $request->input('name_website'); 
     $newLat = $request->input('newCode'); 
     $websites = new Website(); 
     $websites->name = $newName; 
     $websites->html = $newLat; 
     $websites->save(); 
     $name = $newName; 
     return redirect($name); 
    } 
    public function website($name) { 
    $website = Website::where('name', $name)->first()->html; 

    // Render resources/views/template.blade.php or any view you want 
    // and pass the data. E.g. $website, so you can access $website->html in your view. 
    return view('layouts/website', compact('name')); 
} 
} 

路线:

Route::get('home', '[email protected]'); 
Route::get('template', '[email protected]'); 
Route::post('template', '[email protected]'); 
Route::get('logout', '[email protected]'); 
Route::get('/{name}', '[email protected]'); 

website.blade.php:

@extends('layouts.master') @section('title', 'Website Builder') @section('content') 
<meta name="csrf-token" content="{{ csrf_token() }}" /> 


{{html_entity_decode($name->html)}} 
<script src="https://unpkg.com/axios/dist/axios.min.js"></script> 
<script> 
    axios.get('/localhost/name').then(
     html => document.querySelector('html').innerHTML = html  
    ); 
</script> 
</html> 
@endsection @show 

这是怎么回事?

+0

重定向($名)访问HTML;和window.location重新加载页面,你需要你的HTML而不重新加载页面?或者您只需在用户保存数据后显示结果? –

+0

显示结果一旦用户保存数据 – Przemek

回答

0

问题是,当你需要传递$网站时,你传递的变量名称为你的视图。此外,您的Eloquent查询中有一个错误。

试图改变以下,

$name->html // Change this 
$website->html // to this 
return view('layouts/website', compact('name')); // Change this 
return view('layouts/website', compact('website')); // To this 
$website = Website::where('name', $name)->first()->html; // Change this 
$website = Website::where('name', $name)->first(); // To this 
+0

不工作,以及我认为这是能够访问阵列axios的全部要点 – Przemek

+0

我已更新我的重播,请看看它。 –

+0

还有同样的问题:( – Przemek

0

首先而不是在postDB重定向,你必须重定向通过JavaScript

控制器

public function postDB(Request $request) { 

    $website = new Website(); 
    $website->name = $request->input('name_website'); 
    $website->html = $request->input('newCode'); 
    $website->save(); 

    return response()->json(['url' => url($website->name)]); 
} 

的Javascript

$.post('http://localhost/template', { 
    _token: $('meta[name=csrf-token]').attr('content'), 
    newCode: (code2), 
    name_website: (web_name), 
}, function(response){ 
    // Redirecting to the new page here. 
    window.location = response.url; 
}) 
.done(function() { 

}) 
.fail(function() { 
    alert("error"); 
}); 

控制器

public function website($name) { 
    $website = Website::where('name', $name)->first(); 
    return view('layouts/website', compact('website')); 
} 

现在,您可以通过访问$网站变量像$网站 - > HTML

+0

我只是得到计划的HTML代码,而不是实际显示页面 – Przemek

+0

我不明白?计划(纯粹?)html代码是什么意思? –

+0

纯html代码,就像在文本编辑器中键入的实际代码那样

等,所以代码正在显示,它不会更改为实际的框,颜色等 – Przemek