0

我在 ajax 请求中使用自定义标头:

$.ajaxSetup({
                beforeSend: function (xhr)
                {
                    xhr.setRequestHeader("Authorization",  'Bearer ' + token);
                    xhr.setRequestHeader("Accept",  'application/json');
                }
            });

在我将 socket.io 聊天添加到我的应用程序之前,它运行良好。当我包含由我的 socket.io 服务器提供的 socket.io.js 文件时,我的标题不见了:(

当然,我可以将我的标头放在每个 ajax 请求中,但这并不方便。我原来的方法更干净。

任何人都可以帮助我吗?为什么我的标题不见了?有没有办法让它们在使用 socket.io 时再次工作?

更新

当我摆脱 socket.io.js 脚本时,包括:

<script src="http://localhost:6001/socket.io/socket.io.js"></script>

一切正常。不,没有错误,因为我是这样做的:

if(typeof io !== 'undefined') {
    self.echo = window.Echo = new Echo({
        broadcaster: 'socket.io',
        host: CONFIG.socket_url + ":" + CONFIG.socket_port,
        auth: {
               headers: {
                        Authorization: 'Bearer ' + auth.getToken(),
                        Accept:  'application/json'
               },
        },
     });
 }

更新2

那么问题可能不是socket.io,而是laravel-echo(它使用socket.io进行广播)。

4

1 回答 1

1

如果你注释掉那个 Echo 代码呢?

看,我能做的就是评论我能看到的代码。我坚持我的断言,socket.io 中没有任何内容与 jQuery Ajax 调用相混淆。

因此,问题可能是由您在 socket.io 处于活动状态时运行的代码引起的,而不是由 socket.io 本身引起的。

于 2017-12-05T07:41:53.510 回答