Послал POST запрос, а он послал меня в ответ.

1. Женек (27.04.2012 / 22:28)
В общем вот код POST запроса -
function add2cart(page, elem) {
        if($(elem).hasClass('in-cart')) {
            window.location.href = '/cart.html';
        } else {
           $.post('/ajax-cart.html', {act:'add', product:page}, function(data){
               $('#cart-line').html(data);
               $(elem).addClass('in-cart');
            }, 'html');
        }
    }

при нажатии вместо посыла появляется в консоли -
jquery-1.4.4.min.js:141
POST http://***.ru/ajax-cart.html 500 (Internal Server Error)

Пробовал через $.ajax, бредятина какая то... Реально.... По другому не скажешь... То в хроме работает, в опере нет, то наоборот, то ни там ни там.... что за ахтунг? как жить дальше? по адресу http://***.ru/ajax-cart.html ручками перехожу без проблем

2. Александр (27.04.2012 / 22:36)
Скорее всего просто сервак вылетает в этот момент, коды 5** - ошибка на сервере.

3. Женек (27.04.2012 / 22:40)
2. Муз-ТВ, круглосуточно? нет, это не из за этого

4. Александр (27.04.2012 / 22:41)
тогда сайт в студию

5. Женек (27.04.2012 / 22:44)
4. Муз-ТВ, нет смысла, там черт ногу сломит в скриптах, кусок кода который вызывает ошибку я привел.

Когда убираю параметры, то по идее проходит запрос, но мне то нужно с параметрами

6. Дмитрий (27.04.2012 / 22:48)
Во-первых, убедись, что все переменные принимаются именно постом. Возможно ты $act принимаешь через джет smile

Во-вторых, метод $.ajax вполне отличный. Весь мир его юзает, а у тебя не выходит. Угадай, кто виноват?

В-третьих, убедись, что ты правильно передаешь в функцию значения page и elem. Строки должны быть обязательно в одинарных кавычках, числа можно и просто как число. Иначе прийдет undefined либо null.

Попробуй так:
function add2cart(page, elem) { 
	if ($(elem).hasClass('in-cart')) {
		window.location.href = '/cart.html'; 
	} else {
		$.ajax({
			type: 'POST',
			url: '/ajax-cart.htm',
			cache: false,
			data: 'act=add&product='+page,
			dataType: 'html',
			success: function(content)
			{
				$('#cart-line').html(content); 
				$(elem).addClass('in-cart');  
			}
		});
	}
}


7. Женек (27.04.2012 / 22:54)
6. dima.london,
Вставил вот так

  function add2cart(page, elem) {  
    if ($(elem).hasClass('in-cart')) { 
        window.location.href = '/cart.html';  
    } else { 
        alert(page);
        $.ajax({ 
            type: 'POST', 
            url: '/ajax-cart.html', 
            cache: false, 
            data: 'act=add&product='+page, 
            dataType: 'html', 
            success: function(content) 
            { 
                $('#cart-line').html(content);  
                $(elem).addClass('in-cart');   
            },
            error: function (data)
            {
                alert('Error');
            }
        }); 
    } 
}

Отвечает мне Error, алерт page выводит 665

Какая разница как они принимаются, если вылетает 500 ошибка? Если бы я их не принял, просто не прошел бы нужный результат, а здесь именно error в запросе.

Я не спорю что метод ajax отличный, у меня он тоже юзается отлично, а вот в данном скрипте что $.post, что $.ajax дают косяк. Гугл дельного на этот счет ничего не дает.

Добавлено через 01:09 сек.
В консоли все тот же 500

8. Александр (27.04.2012 / 22:56)
7, а обычная html форма отправленная с теми же данными что возвращает?

9. Дмитрий (27.04.2012 / 22:57)
Убедись что адрес правильный. Я так понимаю, что адрес /ajax-cart.html сформирован черех мод-реврайт, так может в htaccess создано неверное правило для него?

10. Женек (27.04.2012 / 22:59)
8. Муз-ТВ, не проверял кстати... Но я думаю что с формой все прокатит нормально. А так чертовщина какая то творится. На других страница выдает еще лучше... Кроме 500 выдает

XMLHttpRequest cannot load http://www.***.ru/ajax-cart.html. Origin http://***.ru is not allowed by Access-Control-Allow-Origin.

Добавлено через 02:07 сек.
9. dima.london, в теории все отлично, все обрабатывается нормально, ручками пускает, хз даже... завтра конечно посмотрю .htaccess.

11. Александр (27.04.2012 / 23:03)
10, дык ты на другой домен отправляешь запрос?
напиши в скрипте header('Access-Control-Allow-Origin: *');

12. Женек (27.04.2012 / 23:04)
11. Муз-ТВ, на этот же домен все уходит, работа внутри сайта. Писал, не спасло)

13. Дмитрий (27.04.2012 / 23:05)
Basters (27 Апреля 2012 / 20:59)
XMLHttpRequest cannot load http://www.***.ru/ajax-cart.html. Origin http://***.ru is not allowed by Access-Control-Allow-Origin.
Ну ты же сам видишь ошибку. XMLHttpRequest не удалось загрузить адрес бла-бла-бла. К тому же если сервер одтает 500 - значит полюбому дело в адресе.

14. Женек (27.04.2012 / 23:06)
Да я сегодня ее со всех сторон изнасиловал. И адрес и htaccess, ладно, пойду посплю, завтра мб на свежий ум чего придет

15. Александр (27.04.2012 / 23:21)
14, потдомен тоже другой домен, похоже что это из-за "http://www.***.ru/ajax-cart.html. Origin http://***.ru " www в начале, попробуй написать полный адрес url: '/ajax-cart.html',

16. Димон (02.05.2012 / 19:08)
1) ajax запросы на другие домены нельзя слать, юзай jsonp
2) второй вариант поставить nginx и проксировать на нужном локэйшине нужный урл

17. Дмитрий (15.06.2012 / 11:51)
Ну чо там хоть за результаты? Получилось у тебя все-таки? Интересно все-таки.

18. Женек (16.06.2012 / 03:06)
17. dima.london, да получилось ) на следующий день со свежей головой все вышло. Там реально была проблема в хтакцессе с редиректами по под доменам

URL: https://visavi.net/topics/31586