溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

通過獨立html用ajax訪問基于ssh2中方法的問題

發(fā)布時間:2020-07-16 19:59:27 來源:網(wǎng)絡(luò) 閱讀:660 作者:15235125653 欄目:web開發(fā)

今天遇到的問題是如題,簡單說就是ajax的跨域問題;首先問題是這樣出現(xiàn)的,在容器(tomcat6)之外(桌面上)新建了個測試html--test.html,調(diào)用在容器中的項目xxx中的方法,所有流程代碼都沒有問題,方法中返回的是json格式字符串,返回方式也是json像這樣:

        <result name="success" type="json">
                <param name="root">json</param>

        </result>

頁面代碼:

$.get("http://localhost:8080/xxx/queryInfo.action?id=111",

     function(data){

        alert(data.name)
},"json")

使用FF的firebug調(diào)試發(fā)現(xiàn)test.html的請求已經(jīng)通過,服務(wù)器狀態(tài)200,延時40ms,但是整個請求是紅色的代表錯誤;之后把test.html中的請求URL粘貼到地址欄,發(fā)現(xiàn)一切正常,之后糾結(jié)中....

使用chrome的控制臺調(diào)試發(fā)現(xiàn):

XMLHttpRequest cannot load http://localhost:8080/xxx/queryInfo.action?id=111   .No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

度娘之后發(fā)現(xiàn)是跨域的問題,

參考http://www.cnblogs.com/chopper/archive/2012/03/24/2403945.html 后將代碼改為

$.get("http://localhost:8080/xxx/queryInfo.action?id=111&callback=?",

     function(data){

        alert(data.name)
},"jsonp")

之后調(diào)試發(fā)現(xiàn)報Uncaught SyntaxError: Unexpected token : 這個錯誤,打開錯誤代碼發(fā)現(xiàn)返回的json格式錯誤,原因是在請求headers里加了這么2段

  1. callback:jQuery110209291235436685383_1437019561773

  2. _:1437019561774

然后就解析不了第二個":",所以就報錯Unexpected token :

繼續(xù)度娘之后發(fā)現(xiàn)是對于jsonp來說有特殊格式需要改,

參考http://kb.cnblogs.com/page/139725/ 后發(fā)現(xiàn)是需要改變返回值的封裝,但是沒有現(xiàn)成的json轉(zhuǎn)jsonp的工具,技術(shù),封裝類(比如string轉(zhuǎn)json之類的工具),需要手動寫,果斷放棄繼續(xù)調(diào)試...

繼續(xù)度娘無意間發(fā)現(xiàn)這個帖子

http://blog.csdn.net/z69183787/article/details/45896577 將struts.xml文件中返回值加一條
<param name="callbackParameter">callback</param>

完美解決~

至此困擾2個多小時的問題解決,特此記錄

PS:jquery 中對于jsonp的封裝,對get類型請求支持比較好,建議用GET方法請求,最好不要用POST

又PS:還有一種暴力跨域方法,貌似只支持chrome和安卓系統(tǒng),

參考http://camnpr.com/archives/chrome-args-disable-web-security.html ,方法就是使用--disable-web-security 這個參數(shù)強行中止跨域安全檢查,最后結(jié)果是一樣的,但是安全性嘛,知乎用戶很好的解答了這個問題http://www.zhihu.com/question/27817605 


向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI