亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用laravel-echo去創建WebSocket連接,創建成功后所有的AJAX請求都變成了

使用laravel-echo去創建WebSocket連接,創建成功后所有的AJAX請求都變成了

慕碼人2483693 2018-10-11 10:14:14
后臺是PHP,要我使用laravel-echo去創建websocket連接,代碼是這樣的:        window.WS = new Echo({            broadcaster: 'socket.io',            host: 'http://192.168.1.52:9103'         });        // 通道使用team.*格式 *使用team id代替         window.WS.channel('team.6')             .listen('TeamDataUpdated', (data) => {              console.log('WebSocket success');         });WebSocket創建成功,沒問題,但是之后發起的所有AJAX請求都變成了OPTIONS方式,還報這樣一個錯誤:XMLHttpRequest cannot load http://api-dev.wisdomtmt.com/team/personal/cancel.  Request header field X-Socket-Id is not allowed by Access-Control-Allow-Headers in preflight response.POST請求的HTTP信息都變成了這樣:所有的請求都發不出去了,難道是因為laravel-echo配置錯誤,但我是按照官方文檔寫的啊。或者有誰能告訴我socket.io有沒有方法能代替上面代碼中的channel方法,我看socket.io沒有看到有類似的方法。如果有知道答案的朋友,多謝幫忙了,不勝感激!
查看完整描述

1 回答

?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

看laravel-echo的源碼,找到原因了。

他會先判斷是不是用了AJAX插件,我是用的jQuery,判斷如下:

if (typeof jQuery === 'function') {    this.registerjQueryAjaxSetup();
}

看看registerjQueryAjaxSetup函數做了什么:

function registerjQueryAjaxSetup() {    var _this3 = this;
    jQuery.ajaxSetup({        beforeSend: function beforeSend(xhr) {
        xhr.setRequestHeader('X-Socket-Id', _this3.socketId());
        }
    });
}

原來是吧jQuery的AJAX初始化頭部設置加了個X-Socket-Id,這個field是用來標識socket身份的,因為我的post請求并不需要這個頭部field,所以一直報錯,soga...直接注釋了。。。。


查看完整回答
反對 回復 2018-11-12
  • 1 回答
  • 0 關注
  • 439 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號