近期在項目中遇到這樣一問題,關(guān)于jsonp跨域問題,get傳值是可以的,但post傳值死活不行啊,于是網(wǎng)上看了一大堆關(guān)于這方面的資料,最終問題得以解決,今天抽空與大家分享下。
說明:
http://www.t1.com/index.php 服務(wù)端URL
當(dāng)然這是我本地配置的,需要改為自己對應(yīng)的地址。
客戶端代碼:
<script> $(function(){ var url = 'http://www.t1.com/index.php'; $.ajax({ type: 'post', url: url, data: {name:'wangyulu'}, dataType: 'jsonp', success:function(result){ console.log(result); } }); }); </script>
服務(wù)端代碼:
<?phpif($_POST){ $arr = array('name'=>$_POST['name'], 'age'=>23); echo json_encode($arr);}
瀏覽器運(yùn)行如下圖:
看下運(yùn)行結(jié)果,即使設(shè)置傳送方式為 post,Jquery也會自動轉(zhuǎn)為 get,難道Jsonp真的不支持 post 方式提交嗎,繼續(xù)折騰...
折騰到現(xiàn)在最終在 stackoverflow 里找到一些關(guān)于這方面的資料,看來老外也遇到這樣問題呀,地址貼給大家
http://stackoverflow.com/questions/3860111/how-to-make-a-jsonp-post-request-that-specifies-contenttype-with-jquery
關(guān)鍵點如下圖:
看上圖我們發(fā)現(xiàn),箭頭標(biāo)記處有變化,先不管這么多了,折騰這么久了,先對應(yīng)放到程序里再說嘛,萬一可以呢
客戶端更改:
添加:crossDomain: true
修改:dataType: "json"
服務(wù)端添加:
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST');
header('Access-Control-Max-Age: 1000');
運(yùn)行結(jié)果如下圖:
到這里我們發(fā)現(xiàn)問題終于解決了,但我們詳細(xì)觀察發(fā)現(xiàn),請求時間那是個漫長啊,,,看來老外也沒個效率高的解決方案,
最后,我想說的是,要想完美支持POST方式的JSONP真心不好辦啊,咱就到這吧,折騰不少時間了。
以上內(nèi)容可能會關(guān)聯(lián)到其它技術(shù)點,有興趣自己可去研究哈,這里主要解決 Jsonp ,寫的不好,大家請勿吐槽,謝謝!
以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。
新聞熱點
疑難解答