說到這問題,相信大部分程序員老手都會輕蔑一笑,當然是跨域導致的啊!但是為了一些小白,我覺得還是很有必要再說一次的。
首先介紹什么是跨域,由於瀏覽器的同源策略,出於防范跨站腳本的攻擊,禁止客戶端腳本( 主要是JavaScript)對不同域名的服務器接口進行跨站調用。一般,只要網站的 協議名protocol(HTTP、ftp等)
、 主機host
、 端口號port
這三個中的任意一個不同,網站間的數據請求與傳輸便構成了跨域。
公眾號開發,要想在前端調用jssdk,先要通過config接口注入權限驗證配置。也就是先要獲取wx.config 中參數的值。由於其中的參數值需要通過access_token和jsapi_ticket這兩個參數來運算得到,而這兩個參數需要請求微信接口才能獲取,微信接口域名跟我們的網頁明顯不在同一域名下,所以造成跨域,從而導致我們無法在前端獲取配置的參數。因此我們只能通過服務器用服務器端語言php java c#等進行相關微信接口的請求。
另外,也有人非得用前端去請求,比如我,通過JSONP形式去請求數據,首先:JSONP這種非官方協議是需要后台配合寫返回數據的,也就是返回回調函數,微信不可能做這個,數據不安全。
總而言之,言而總之,微信就是要讓你在后台使用服務端語言請求接口!!也為了安全!
java版的jssdk 接口出入配置參見http://www.cuiyongzhi.com/post/57.html
2017/7/17 更新, 后來我又想能不能把js寫在php中用ajax請求微信接口,試了不行,js不是后台語言根本不在服務器端運行,除非用nodejs 有專門的解釋器。