1

新しい目が必要なだけかもしれませんが、それはばかげていますが、次の問題があります。

次のようなインラインフォルダーの名前変更を実装しました。

$(function () {
        $(".name").dblclick(function (e) {
            e.stopPropagation();
            var currentEle = $(this).children("a");
            var value = currentEle.html();
            updateVal(currentEle, value);
        });
    });

    function updateVal(currentEle, value) {
        var is_file = 0;
        if(currentEle.hasClass('file')){
            is_file = 1;
        }
        var rnm_dir = currentEle.attr('href');
            rnm_dir = rnm_dir.replace('?dir=','');

        $(currentEle).html('<input class="thVal" type="text" value="' + value + '" />');
        $(".thVal").focus();
        $(".thVal").keyup(function (event) {
            if (event.keyCode == 13) {
                var n_name = $(".thVal").val();
                $('.thVal').remove();
                $(currentEle).html(n_name);

                $.ajax({
                    cache: false,
                    type: 'GET',
                    url: 'addfunctions.php',
                    data: {'rnm_dir':rnm_dir, 'is_file':is_file, 'new_name':n_name, 'function':'rename'},
                    dataType: "json",
                    beforeSend: function(){
                        console.log('ok');
                    },
                    success: function(response){
                        alert(response.name);
                    },
                    error: function (request, status, error) {
                        alert(request.responseText);
                    }
                });
            }
        });

        $(document).click(function () {
                $(currentEle).html($(".thVal").val());
        });
    }

コンソールで私が見る:

?rnm_dir=%3Fdir%3Dpress/Blackfield/Blackfield%25202/joijuoi&is_file=0&new_name=dcxfgdfxg&function=rename 

しかし、元のディレクトリが見つからないというエラーが表示されますrename(,/dcxfgdfxg)

ただし、コンソール出力をファイルに直接実行すると:

addfunctions.php?rnm_dir=%3Fdir%3Dpress/Blackfield/Blackfield%25202/New%2520Folder&is_file=0&new_name=joijuoi&function=rename

実際に名前を変更します

私のphpは:

$is_file = $_GET['is_file'];
$rnm_dir = urldecode($_GET['rnm_dir']);
$new_name = $_GET['new_name'];

$rnm_dir = str_replace('?dir=','',$rnm_dir);

if($is_file){
    $inf = pathinfo($rnm_dir);
    $ext = $inf['extension'];
    $dir = $inf['dirname'];
    $n_file = $dir.'/'.$new_name.'.'.$ext;
    rename($rnm_dir, $n_file);
    $out['name'] = $n_file;
    echo json_encode($out);
} else {
    $dir = dirname($rnm_dir);
    $n_dir = $dir.'/'.$new_name;
    rename($rnm_dir, $n_dir);
    $out['name'] = $n_dir;
    echo json_encode($out);
}

作業コードに修正

4

1 に答える 1

2

?この問題はinが原因だと思いますdat?rnm_dirこれにより、 の代わりにGET キーが作成されますrnm_dir。この方法でデータを渡す場合、?は必要ありません。

将来的にこれを見つける簡単な方法は、PHP 関数print_r($_GET);を使用して、サーバー側で実際に受信したデータを表示することです。

于 2013-06-20T17:41:21.607 に答える