[英]jQuery $.ajax() executed twice?
這是一個按鈕:
<input type="button" value="add to cart" id="addToCart" />
和綁定事件:
$("#addToCart").bind('click',function(){
$.ajax({
url: '/cartManager/add',
data:{
pictureId: currentImageId,
printSize: $("#size option:selected").val(),
paperType: $("#paperType option:selected").val(),
quantity: 1
},
success: function(){
$("#modal").html("<h1>ОК</h1><p>Closing in a sec</p>").delay(1000);
$("#modal").overlay().close();
}
});
return false;
});
一切工作都找不到一件令人煩惱的事情,我在Chrome開發者控制台中看到了兩個請求:
Request URL:http://127.0.0.1:8000/cartManager/add?pictureId=4&printSize=2&paperType=1&quantity=1 Request Method:GET Status Code:301 MOVED PERMANENTLY
Request URL:http://127.0.0.1:8000/cartManager/add/?pictureId=4&printSize=2&paperType=1&quantity=1 Request Method:GET Status Code:201 CREATED
兩者的請求標頭幾乎相同,是請求標頭中的唯一區別:
首先是cartManager / add?pictureId =等等,第二個是cartManager / add /?pictureId - '/'之后/ add
我的javascript有問題嗎?
本身沒有任何問題,但您應該將尾隨斜杠添加到/cartManager/add
自己。
發生的事情是Web服務器使用新URL向AJAX客戶端發送301
重定向,因此它向正確的URL發出新請求(即使用尾部斜杠)。
發生這種情況的原因是: http : //httpd.apache.org/docs/2.0/mod/mod_dir.html#directoryslash
與你的javascript一樣,這是純粹的Apache魔法。
當然,正如其他答案中所指出的,你應該在“添加”之后添加一個斜杠,因為“添加”顯然是一個文件夾,而不是文件。
Status Code:301 MOVED PERMANENTLY
不,你的JavaScript不會造成這種情況。 看起來您的服務器正在重定向/cartManager/add
到/cartManager/add/
。 由於服務器需要一個尾部斜杠,為什么不添加它並避免重定向?
標題有你需要的線索。
您對'/ cartManager / add'的請求正被轉發到'/ cartManager / add /'(注意結束正斜杠)。
用。替換你的ajax調用
$.ajax({
url: '/cartManager/add/',
data:{
pictureId: currentImageId,
printSize: $("#size option:selected").val(),
paperType: $("#paperType option:selected").val(),
quantity: 1
},
success: function(){
$("#modal").html("<h1>ОК</h1><p>Closing in a sec</p>").delay(1000);
$("#modal").overlay().close();
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.