Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JavaScript请求网页_Javascript_Jquery_Ajax_Yii2 - Fatal编程技术网

如何使用JavaScript请求网页

如何使用JavaScript请求网页,javascript,jquery,ajax,yii2,Javascript,Jquery,Ajax,Yii2,在我的网站上,有一个无处不在的搜索栏,它是一个typeahead小部件。这个小部件有一个我当前正在尝试实现的“选定”回调 在回调中,它确定是否需要在现有页面上发出AJAX请求,或者是否需要转到另一个页面。我的问题是,我在任何地方都找不到使用已发布变量进行重定向的方法,比如在jqueryajax请求中。是否有任何方法可以通过发布的变量实现页面请求,这些变量将完全刷新页面,比如单击普通的超链接 这是我的密码: function getData(event, datum, dataset) {

在我的网站上,有一个无处不在的搜索栏,它是一个typeahead小部件。这个小部件有一个我当前正在尝试实现的“选定”回调

在回调中,它确定是否需要在现有页面上发出AJAX请求,或者是否需要转到另一个页面。我的问题是,我在任何地方都找不到使用已发布变量进行重定向的方法,比如在jqueryajax请求中。是否有任何方法可以通过发布的变量实现页面请求,这些变量将完全刷新页面,比如单击普通的超链接

这是我的密码:

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检查,这将是最令人不愉快的。