jQuery $ .ajax()执行了两次?

时间:2011-04-04 21:13:14

标签: javascript jquery ajax

这是一个按钮:

<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开发者控制台中看到了两个请求:

  1. add / cartManager:
  2. 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
    
    1. add / cartManager / add?:
    2. 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有问题吗?

4 个答案:

答案 0 :(得分:10)

本身没有任何错误,但你应该自己添加尾部斜杠{/ 1}}。

正在发生的事情是,Web服务器正在使用新URL向AJAX客户端发送/cartManager/add重定向,因此它会向正确的URL发出新请求(即使用尾部斜杠)。

答案 1 :(得分:2)

这是因为:http://httpd.apache.org/docs/2.0/mod/mod_dir.html#directoryslash

Nohing与你的javascript,这是纯粹的Apache魔法。

当然,正如其他答案中所指出的,你应该在“添加”之后添加一个斜杠,因为“添加”显然是一个文件夹而不是文件。

答案 2 :(得分:1)

Status Code:301 MOVED PERMANENTLY

不,你的JavaScript不会造成这种情况。看起来您的服务器正在将/cartManager/add重定向到/cartManager/add/。由于服务器需要一个尾部斜杠,为什么不添加它并避免重定向?

答案 3 :(得分:1)

标题包含您需要的线索。

您对'/ 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();

                    }
                });