我对PHP没有太多经验,但是我想做的是将内容写入文件。由于某种原因,内容已写入文件,但仍返回“写入文件失败!”。状态代码为400。但是内容已成功写入文件。怎么样?

php代码(update.php):

<?php
    //get root and page of request
    $content_root = $_SERVER['DOCUMENT_ROOT'] . '/Animagie/content';
    $page = $_POST['page'];

    //open the correct contentfile
    $content_file = fopen($content_root . '/' . $page, 'w');

    if (isset($_POST[$page . '-content'])) {

        if (fwrite($content_file, $_POST[$page . '-content']) === FALSE ) {

            echo 'failed to write to file!';
            fclose($content_file);
            http_response_code(400);
        } else {

            fclose($content_file);
            http_response_code(200);
        }
    } else {

        echo 'something went wrong!';
        fclose($content_file);
        http_response_code(400);
    }
?>


我用以下代码调用update.php:

    editor.addEventListener('saved', function(e) {
    var name, payload, regions, xhr;

    //check if something changed
    regions = e.detail().regions;
    if (Object.keys(regions).length === 0) {
        return;
    }

    //set editor busy while saving
    this.busy(true);

    // Collect the contents of each region into a FormData instance
    payload = new FormData();
    payload.append('page', getCurrentPage());
    for (name in regions) {
        if (regions.hasOwnProperty(name)) {
            payload.append(name, regions[name]);
        }
    }

    // Send the updated content to the server to be saved
    function onStateChange(e) {
        //check if request is finished
        if (e.target.readyState === 4) {
            editor.busy(false);
            if (e.target.status === '200') {
                new ContentTools.FlashUI('ok');
            } else {
                new ContentTools.FlashUI('no');
            }
        }
    }

    xhr = new XMLHttpRequest();
    xhr.addEventListener('readystatechange', onStateChange);
    xhr.open('POST', '../api/update.php');
    xhr.send(payload);
});


正如您可能会说的那样,获取正确的状态码很重要,因为我会对其进行检查并向用户返回是否成功。有人可以帮助我吗?

提前致谢!

最佳答案

显然,问题出在javascript检查中:

if (e.target.status === '200') {
    new ContentTools.FlashUI('ok');
} else {
    new ContentTools.FlashUI('no');
}


应该

if (e.target.status == 200) {
    new ContentTools.FlashUI('ok');
} else {
    new ContentTools.FlashUI('no');
}


同样,在我切换了if语句(如@Jon Stirling所说)后,邮递员还没有刷新。因此,部分原因是服务器端的if语句错误,而客户机端的if语句错误。

10-06 03:51