jQuery $ .ajax () выполняется дважды? - PullRequest
6 голосов
/ 05 апреля 2011

Вот кнопка:

<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 devКонсоль для этого:

  1. add / cartManager:
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?:
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 - '/' after / add

Что-то не так с моим JavaScript?

Ответы [ 4 ]

10 голосов
/ 05 апреля 2011

Само по себе нет ничего плохого, но вы должны добавить косую черту к /cartManager/add сами.

Происходит следующее: веб-сервер отправляет перенаправление 301 клиенту AJAX с новым URL-адресом, поэтому он отправляет новый запрос на соответствующий URL-адрес (т. Е. С косой чертой).

2 голосов
/ 05 апреля 2011

Это происходит из-за этого: http://httpd.apache.org/docs/2.0/mod/mod_dir.html#directoryslash

Ничего общего с вашим JavaScript, это чистое волшебство Apache.

Конечно, как указывалось в других ответах, вы должны добавить косую черту после «добавить», потому что «добавить» - это, конечно, папка, а не файл.

1 голос
/ 05 апреля 2011

В заголовке есть необходимые подсказки.

Ваш запрос к '/ 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();

                    }
                });
1 голос
/ 05 апреля 2011
Status Code:301 MOVED PERMANENTLY

Нет, ваш JavaScript не вызывает этого. Похоже, ваш сервер перенаправляет /cartManager/add на /cartManager/add/. Поскольку сервер хочет использовать косую черту, почему бы просто не добавить его и избежать перенаправления?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...