2013-02-20 2 views
10

У меня есть АЯКС пост как таковой:Jquery Ajax сделать обратный вызов не отвечает на 201

$.post("/api/v1/payment_methods/create_credit_card", values) 
.done (response) -> 
    console.log("GOOD JOB") 
.fail (response) -> 
    console.log("Adas") 

Ответом является 201, однако, похоже, не сделали ничего, чтобы быть захватить его и вместо этого он собирается потерпеть неудачу. Я думал, что 201 будет считаться успешным и будет захвачен совершенным. Любые идеи, почему это не сработает?

Примечания: Приведенный выше код в CoffeeScript, который никак не влияет на вопросе, но объясняет мой синтаксис

+0

Ну я изначально не посылая его сам. Api, который я отправлял, отправил бы назад строку, если бы она была успешной, которая попала в комплекте как 201. Лучше ли вы просто вернуть 200 вручную? – justNeph

+1

Работает ли он, если вы измените его на 200? –

+0

Я пробовал 200 и до сих пор ничего хорошего. Проверка статуса в ajax забирает его, но он все равно терпит неудачу – justNeph

ответ

8

Итак, мы выяснили, что случилось, JSON.parse кидал синтаксическую ошибку - так послало значение in isnt в действительном формате JSON. Плакат не смог увидеть ошибку синтаксиса в хроме, но firebug показал ошибку.

Это указывает, что всякий раз, когда Javascript генерирует исключение, ответ может быть равен 200, 201, 202 и т. Д., Но из-за синтаксической ошибки будет вызвана функция fail().

EDIT - Также вы должны использовать другой ответ, многие используют 200 - ОК, но Id рекомендует использовать 202 - ACCEPTED в этом случае.

+0

Ой, извините, я забыл упомянуть, что мой код выше в Coffeescript – justNeph

+0

Я попытался изменить его, чтобы вернуть 202, но все еще не удалось его захватить – justNeph

+0

Вы использовали firebug и посмотрели ответ? –

2

Глядя на источник, успех должен уволить за что между 200 - 300 и 304. Альтернативой является явно крикнуть StatusCode:

$.ajax({ 
    statusCode: { 
    201: function() { 
     console.log("HERE"); 
    } 
    } 
}); 
+0

Я мог бы вручную проверить конкретный код состояния, но я хотел использовать сделанный метод для проверки всех успехов. Есть ли причина, по которой это сделано, не будет срабатывать для 201 или 202? – justNeph

+0

Как я уже сказал, исходя из источника, кажется, что это должно его захватить. Я просто предлагал обратный вызов statusCode, чтобы убедиться, что это правильно зафиксировано. –

Смежные вопросы