如何使用JavaScript请求网页
在我的网站上,有一个无处不在的搜索栏,它是一个typeahead小部件。这个小部件有一个我当前正在尝试实现的“选定”回调 在回调中,它确定是否需要在现有页面上发出AJAX请求,或者是否需要转到另一个页面。我的问题是,我在任何地方都找不到使用已发布变量进行重定向的方法,比如在jqueryajax请求中。是否有任何方法可以通过发布的变量实现页面请求,这些变量将完全刷新页面,比如单击普通的超链接 这是我的密码:如何使用JavaScript请求网页,javascript,jquery,ajax,yii2,Javascript,Jquery,Ajax,Yii2,在我的网站上,有一个无处不在的搜索栏,它是一个typeahead小部件。这个小部件有一个我当前正在尝试实现的“选定”回调 在回调中,它确定是否需要在现有页面上发出AJAX请求,或者是否需要转到另一个页面。我的问题是,我在任何地方都找不到使用已发布变量进行重定向的方法,比如在jqueryajax请求中。是否有任何方法可以通过发布的变量实现页面请求,这些变量将完全刷新页面,比如单击普通的超链接 这是我的密码: function getData(event, datum, dataset) {
function getData(event, datum, dataset) {
event.preventDefault();
// get controller action portion of current url
var Controller = '<?= preg_replace('/\/.*/', '', preg_replace('/\/.*\/web\//', '', Yii::$app->request->url)) ?>';
var Key;
// get key out of key-value pair - will either be 'game', 'developer' or 'publisher'
for (var k in datum) {
Key = k;
}
// if the controller action is the same as key, then the request is ajax
// this works fine
if (Key === Controller) {
var req = $.ajax( {
type: 'POST',
url: 'getchilddata',
data: { data: datum[Key] },
})
.done(function(data) {
$('#display-div').html(data);
})
.fail(function() {
console.log("Failed");
})
} else { // else we need to go to a page on a different controller action according to Key
// this is the best i've got so far but want it to be better
window.location.href = Key + '/datastream?q=' + datum[Key];
}
}
函数getData(事件、数据、数据集){
event.preventDefault();
//获取当前url的控制器操作部分
var控制器=“”;
var键;
//从键值对中获取密钥-将是“游戏”、“开发人员”或“发布者”
用于(基准中的var k){
Key=k;
}
//如果控制器操作与键相同,则请求是ajax
//这个很好用
如果(键===控制器){
var req=$.ajax({
键入:“POST”,
url:'getchilddata',
数据:{data:datum[Key]},
})
.完成(功能(数据){
$('#display div').html(数据);
})
.fail(函数(){
console.log(“失败”);
})
}else{//else我们需要根据键转到不同控制器操作的页面
//这是迄今为止我得到的最好的,但我希望它能更好
window.location.href=Key+'/datastream?q='+datum[Key];
}
}
实现这一点的唯一方法是创建一个带有隐藏输入的表单,因为您无法通过Javascript发送post变量,幸运的是,有一个插件会为您保存一些代码,但最后插件只需创建一个隐藏表单,并模拟通过post发送表单的重定向,这就是如何使用它:
if (Key === Controller) {
$.ajax( {...})
} else {
$().redirect(Key + '/datastream, {'q': 'datum[Key]'});
}
注意:您可以将方法(GET或POST)作为可选的第三个参数传递,POST是默认值它是同一域上的页面吗?你到底在使用php吗?@Anticom就像上面ajax请求的评论所说的那样,这一点很好,不是我要问的about@MichaelPodrybau是的,是的。不完全清楚你要求做什么。使用查询字符串的GET方法有什么问题?使用header('Location:mypage.php');您可以将POST数据存储在会话变量中,并在一些检查中编码以检查会话变量是否已设置,设置$\u POST['whater']=$\u session['whater'],然后取消设置($\u session['whater'])(是的,您可以通过这种方式显式设置$\u POST变量)这就是我要说的。你能建议在哪里安装插件吗?@AndyHall只需将代码复制/粘贴到js文件中,并在jquery之后将其添加到html中,然后你就可以使用它了。选择你作为正确答案,因为这是最优雅的解决方案,事实上这是唯一的答案;)我只需添加这个。如我的标签所示,我使用的是yii2。我遇到了一个错误请求的问题,因为我没有在post变量中随_csrf值一起发送。我通过将其添加到post变量数组中解决了这个问题:_csrf:$('meta[name=“csrf-token”]').attr(“content”)。唯一的其他方法是在控制器中禁用CSRF检查,这将是最令人不愉快的。