1. 程式人生 > >jsonp支援post提交嗎?

jsonp支援post提交嗎?

JSONP是一種非官方協議,可以解決AJAX跨域提交資料情況。

安全部門的同事測試發現,都是GET的請求,相比較而言不如POST安全,還是儘量改了吧。

拖啊拖,終於還有別的業務要這個介面,想了想還是改了吧,反正聽人勸吃飽飯嘛 。但是,JSONP真的支援POST提交嗎?




先是一天夜裡加班無聊,做了一下POST,發現請求傳送過去的METHOD為OPTIONS,而不是POST,同時沒有得到返回結果。

今天下午抽時間,特意處理一下這個事情。事實證明OPTIONS的狀態可能是我拼錯東西了,反正今天沒有重現。不過當我把資料改為POST後,我發現COOKIE已經生成了,證明我資料提交過去了。但是content裡沒有返回值,Firebug看不到,但是Fiddler可以看到。



POST提交,firebug之所以看不到的原因是,我的執行跨域了。我執行的域名為localhost,而提交請求的域名為公司域名。

一計不成,又生一計。咋的活人還能讓尿憋死?

jQuery裡面有N多jsonp的方法,挨個試唄:getScript   getJson   ajax( 指定dataType為jsonp或script)

發現jQuery的getScript不支援POST,但是其等同於$.ajax(datatype:script)啊,咱再指定type為Post不就成了嘛 。不過改完後,發現還是變成了GET請求,很奇怪,翻看API如下:

“script”: Evaluates the response as JavaScript and returns it as plain text. Disables caching by appending a query string parameter, “_=[TIMESTAMP]“, to the URL unless the cache option is set to true. Note: This will turn POSTs into GETs for remote-domain requests.

看來,你即使設定為POST,jQuery發現是getScript時,也會自動給你轉成GET。測試 datatype為jsonp時 POST請求同樣會被轉化成GET。

難道是JSONP不支援POST方式發起請求嗎?

一個外國友人,和咱遇到同樣的問題:http://stackoverflow.com/questions/3860111/how-to-make-a-jsonp-post-request-that-specifies-contenttype-with-jquery

得到的回答是這樣的:



找到這篇文章,《JSONP跨域的原理解析》 從文中可以看出,其實使用特殊的方法也是可以支援POST的,不過太過繁瑣。作者舉的例子為:動態建立iframe方式POST跨域。

最後,我想說的是,要想支援POST方式的JSONP很難,咱就別難為自己了,這個介面不改了 – -!!