OTCloud
@OTCloud
Программирование и Архитектура ПО

Как правильно оформить запрос AJAX?

Подскажите в чем ошибка такого написания запроса?
Меня даже консоль ошибками не лупит, поэтому догадаться сам не в силах...

Вот js файл:
function someFunction ( user_id, post_id )
{
$.ajax({
		url: "http://my-website/ajax/u-favorite.php",
		type: "POST",
		data: {
			userID: user_id,
			postID: post_id
		},
		success: success_add_favorite()
	});
}


PHP файл:
if ( isset( $_POST["add_favorite_btn"] ) )
{

	add_favorite( $_POST["userID"], $_POST["postID"] );

}
  • Вопрос задан
  • 79 просмотров
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Так вы же параметр add_favorite_btn в запросе не отправляете.
Ответ написан
BRAGA96
@BRAGA96
У Вас функция success_add_favorite() выполняется сразу а не в callback`е success.
Напишите так, без немедленного вызова:
success: success_add_favorite

В jQuery после 1.9 версии параметра type: 'POST' нету, есть method: 'POST'

При использовании функции $.ajax лучше возвращать её Deferred объект, так вы будете знать промис когда она выполнилась не только в callback success или error:
function someFunction(userID, postID) {
    return $.ajax({...});
}

someFunction(a, b).done(function () {
    //> Запрос прошел успешно
});


Вы отправляете json, так укажите это в Content-Type: 'application/json'. И укажите тип который принимаете, например dataType: 'json'

Можете написать свою функции promise используя deferred объекты, например так:
getUsers().done(function (users) {
    console.log(users);
});

function promise(callback) {
    var deferred = $.Deferred();
    callback && callback(deferred.resolve, deferred.reject);
    return deferred;
}

function getUsers() {
    return promise(function (resolve, reject) {
        $.ajax({
            url: 'https://jsonplaceholder.typicode.com/users',
            method: 'GET',
            dataType: 'json',
            success: function (users) {
                resolve(users.filter(function (user) {
                    return user.id <= 5;
                }));
            },
            error: reject
        });
    });
}


А также аналог Promise.all:
promiseAll([promise, promise, promise]).done(function () {
    //> Все промисы завершенны успешно
});

function promiseAll(promises) {
    return $.when.apply(null, promises);
}


Вот вам пример правильного оформленного post запроса:
addPost({
    title: 'foo',
    body: 'bar',
    userId: 1
}).done(function (response) {
    console.log(response); //> {title: "foo", body: "bar", userId: 1, id: 101}
});

function addPost(data) {
    return $.ajax({
        url: 'https://jsonplaceholder.typicode.com/posts',
        method: 'POST',
        dataType: 'json',
        contentType: 'application/json',
        data: JSON.stringify(data)
    });
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы