Ajax请求取决于第一个(然后。)

时间:2017-01-23 23:48:31

标签: javascript php ajax

我尝试使用第一个函数来检查项目是否存在以及是否可以将项目添加到PHP $ _session。

我想在$ _Session中有3个MAX项目,如果该项目存在于会话中,它将返回1.这样,收藏夹功能可以更新会话中属于项目ID的信息。 $ _Session有一个多维数组,它包含项目的id,包含项目的属性数组。稍后,当侧边栏打开时,我有一个ajax调用请求会话中的所有相关信息,然后查询我的SQL以获取最新信息。 PHP然后清理代码并将其作为JSON发回,并且Javascript将其解析以将其放在侧边栏中。

我一直试图弄清楚如何用" .then" JavaScript中的选项,但我没有进一步使用它。

(我在代码中添加了一些注释来解释它的作用以及它应该从PHP / $ _SESSION返回的内容)

function favoriteNr(){
    var xhr = new XMLHttpRequest();
    var door_param = gup( 'name' );
    xhr.open('POST', '/nr_check.php', true);
    xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    xhr.setRequestHeader('X-Requested-With', 'XMLHtppRequest');
    xhr.onreadystatechange = function () {
        if (xhr.readyState == 4 && xhr.status == 200){
            var result = xhr.responseText;
            console.log('Result: ' + result);
            var favoriteNr = result; // returns a number, between 0 to 2 it should let the other function run otherwhise it should run the alert function
        }
    };
    xhr.send("door=" + door_param); }

function favorite(){
    var parent = this.parentElement;
    var xhr = new XMLHttpRequest();
    var door_param = gup( 'name' ); //Gets the value "name" from URL
    xhr.open('POST', '/favorite.php', true);
    xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    xhr.setRequestHeader('X-Requested-With', 'XMLHtppRequest');
    xhr.onreadystatechange = function () {
        if (xhr.readyState == 4 && xhr.status == 200){
            var result = xhr.responseText;
            //console.log('Result: ' + result);
            if(result == 'color') {
                parent.classList.remove("favorite");
            }
        }
    };
    xhr.send("door=" + door_param + "&color=" + parent.id); //This is parsed by php and put into a $_session
   //console.log("door=" + door_param + "&uncolor=" + parent.id);


 }   

function sbfSwitch(){ // should only be run if trying to add 1 more item and we already have 3 items in the session
        SBF1.style.display = "none";
        SBF2.style.display = "block";
        alert('Please delete one of the doors in the side menu, before adding  anymore. There is a MAX of 3 Doors that you can favorite.');
        getFavorites();
}

2 个答案:

答案 0 :(得分:0)

所以一直在研究一些示例fetch代码,(在所有内容上仍然不是完全清晰)但是那样可以解决这个问题吗?

t.has_key(ew)

答案 1 :(得分:0)

使用fetch前两个函数将是

function favoriteNr() {
    var body = new FormData();
    body.append('door', gup('name'));
    return fetch('/nr_check.php', { 
        method: 'POST',
        headers: new Headers({
            'Content-type': 'application/x-www-form-urlencoded',
            'X-Requested-With': 'XMLHtppRequest'
        }),
        body: body
    })
    .then(function(response) {
        if (!response.ok) {
            throw new Error('Network status ' + response.status + ':' + response.statusText)
        }
        return response.text();
    })

function favorite() {
    var parent = this.parentElement;
    var body = new FormData();
    body.append('door', gup('name'));
    body.append('color', parent.id);
    return fetch('/favorite.php', { 
        method: 'POST',
        headers: new Headers({
            'Content-type': 'application/x-www-form-urlencoded',
            'X-Requested-With': 'XMLHtppRequest'
        }),
        body: body
    })
    .then(function(response) {
        if (!response.ok) {
            throw new Error('Network status ' + response.status + ':' + response.statusText)
        }
        return response.text();
    })
    .then(function(result) {
        if(result == 'color') {
            parent.classList.remove("favorite");
        }
    });
}

favoriteNr()
.then(result) {
    var n = parseInt(result);
    if (n >=0 && n <=2) {
        return favorite();
    }
    sbfSwitch();
}