西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁(yè)編程開(kāi)發(fā)javascript|JQuery → 當(dāng)jsp文件放在某個(gè)文件夾下時(shí)jquery的.ajax方法失效的解決方案

當(dāng)jsp文件放在某個(gè)文件夾下時(shí)jquery的.ajax方法失效的解決方案

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:櫻花樹(shù)下的家時(shí)間:2010/3/16 17:28:23字體大。A-A+

作者:佚名點(diǎn)擊:433次評(píng)論:1次標(biāo)簽: ajax

  • 類型:編程控件大小:6.8M語(yǔ)言:中文 評(píng)分:2.5
  • 標(biāo)簽:
立即下載

 我的頁(yè)面的代碼如下,jquery-1.4.2.min.js導(dǎo)入沒(méi)有問(wèn)題,本來(lái)這個(gè)文件和jquery-1.4.2.min.js是放在webroot目錄下的,可以正常運(yùn)行。
但是我把這兩個(gè)文件一起放在一個(gè)名為test的文件夾下后$.ajax(...)就像沒(méi)有執(zhí)行一樣,服務(wù)器端一點(diǎn)反應(yīng)都沒(méi)有(根本就沒(méi)有訪問(wèn)TestServlet),瀏覽器的地址欄里只是在路徑的末尾加了個(gè)#號(hào),沒(méi)有什么變化,也就是說(shuō),頁(yè)面只是調(diào)回本頁(yè)面而已。 alert("in test");和alert("end");都被執(zhí)行了,就是中間的$.ajax沒(méi)有執(zhí)行
<head>
<script Charset="UTF-8" type='text/javascript' src='jquery-1.4.2.min.js'></script>
<script type="text/javascript">
$(document).ready(function() {
var age=0;
alert("in test");
$("a").click(function() {
alert("click");
$.ajax({
type: "GET",//http請(qǐng)求方式
url: "TestServlet",//服務(wù)器端url地址
data: "name=weager"+"&age="+age,//發(fā)送給服務(wù)器端的數(shù)據(jù)
dataType: "json",//告訴JQuery返回的數(shù)據(jù)格式(例如xml、json、jsonp、script等)
success: callback //當(dāng)請(qǐng)求操作完成數(shù)據(jù)正確返回時(shí)調(diào)用callback函數(shù)。此處的ajax參數(shù)還可以有:complete、success、error。complete是指readystate==4時(shí);success是指state==200時(shí);error是指相應(yīng)出錯(cuò)或者解析服務(wù)器數(shù)據(jù)出錯(cuò)。
//error: function(data){alert(data);}
});
alert("end");
});
});

function callback(data){
alert("call back 被調(diào)用!")
alert(data.age);
$("div").html(data.age);
}
</script>

 

網(wǎng)上有關(guān)這個(gè)得問(wèn)題很少,由于頁(yè)面上沒(méi)喲什么變化、服務(wù)器又沒(méi)有任何反應(yīng),$.ajax方法又不是自己寫(xiě)的,所以找bug非常困難。后來(lái)迫不得已,只有把調(diào)試深入到j(luò)query里,但是jquery-1.4.2.min.js里沒(méi)有換行,調(diào)試和查看代碼很困,于是我下載了一個(gè)uncompressed版的jquery-1.4.2.js來(lái)替換jquery-1.4.2.min.js。然后用ie8調(diào)試(firebug也可以),調(diào)試到5179行查看xhr對(duì)象的responseText屬性才發(fā)現(xiàn)服務(wù)器端的報(bào)錯(cuò)為404(...test/TestServlet is not avalible),這才知道是服務(wù)器再找Servlet的時(shí)候找不到匹配的url。

于是我把web.xml里的url-pattern改為了test/TestServlet就可以了,但是test文件夾外的jsp文件訪問(wèn)相同的Servlet時(shí)卻出了想類似的錯(cuò),這時(shí)我才想起來(lái),要把jsp頁(yè)面里的basePath設(shè)置一下(basePath作用就是設(shè)置該頁(yè)面的路徑的前綴),就可以去掉url上的文件夾名了。

具體方法如下:

1. web.xml文件里url-pattern不需要改動(dòng),保持原來(lái)的就可以了

2. 在<html>前面加上:

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
3. 在<head></head>里添加:<base href="<%=basePath%>"> (base標(biāo)簽設(shè)置了該頁(yè)面里其他路徑的前綴)

 

OK~~搞定了,只要能找到報(bào)錯(cuò)就容易解決問(wèn)題,最怕的就是看不到報(bào)的錯(cuò),運(yùn)行又不正常!

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(1)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)