我两个小时后完全陷入困境,绝对需要你的帮助。免责声明:我不是一个程序员 - 只是一个试图嘲笑一个想法的人。
所以我的页面实际上工作正常,但我考虑将内容从模式弹出窗口移动到实际的子页面。含义:如果用户点击某个按钮,则会收集当前页面中的某些数据点并将其传递到另一个视图,该视图将使用数据点作为输入进行渲染。
编辑:澄清:按钮位于/results.php上,其中数据是动态生成的。该方法应该从这里获取一些数据点并生成一个新视图并在/buy.php或者/buy/custom.php中呈现它
我的想法:
结合我的想法 - >使用ajax并返回一个新的视图。
我尝试了什么:
$("body").on("click", ".fa-shopping-cart", function() {
var $para1 = $(this).attr("data1");
var $para2 = $(this).attr("data2");
var $para3 = $(this).attr("data3");
var $para4 = $(this).attr("data4");
$.ajax({
url: "buy",
data: {
a: $para1,
b: $para2,
c: $para3,
d: $para4
},
beforeSend: function (xhr) {
var token = $('meta[name="csrf_token"]').attr('content');
if (token) {
return xhr.setRequestHeader('X-CSRF-TOKEN', token);
}
},
type: "post",
success: function(response){
console.log(response);
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(JSON.stringify(jqXHR));
console.log("AJAX error: " + textStatus + ' : ' + errorThrown);
}
});});
路由:
Route::post('/buy', 'PageRouting@buy');
控制器:
public function buy()
{
$para1= $_POST['a'];
$para2 = $_POST['b'];
$para3 = $_POST['c'];
$para4 = $_POST['d'];
// some magic to output $data
return view('pages.buy', compact("data"));
}
buy.blade.php存在并在foreach循环的帮助下显示$ data。
所以,当我第一次点击按钮时,显而易见的事情发生了:
视图(' pages.buy')以简单的html格式记录/显示在我的控制台中,不会在浏览器中呈现。
现在我坐在这里已经两个小时了,我一无所知。我读了一篇博文,说你不能在ajax调用中重定向。不幸的是,该帖子并没有暗示如何改为。
有人可以帮助我吗?
一切顺利
答案 0 :(得分:0)
在你的购买方法中 -
public function buy ()
{
....//some stuff to get $data
$html = view('pages.buy', compact("data"))->render();
return response()->json([
'success' => true,
'html' => $html
])
}
在你的ajax成功函数中
success: function(response){
if(response.success)
{
$('#elementId').html(reponse.html) // or whatever you need
}
},
答案 1 :(得分:0)
如果您想用响应替换整个文档,则必须使用document.write,但这不是最好的事情。如果您需要返回视图,为什么不使用普通表单提交?
success: function(response){
document.write(response);
},
P.S。如果您还想更改网址,请使用历史记录操作功能。
https://developer.mozilla.org/en-US/docs/Web/API/History_API