2013-06-20 12 views
1

我可能只需要一双崭新的眼睛和它的一些愚蠢的,但我有这个问题:阿贾克斯PHP - 目录mising

我已经实现内联重命名文件夹,如:

$(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); 
} 

修订,工作代码

回答

2

我认为这个问题是由中的?造成的。这将使GET密钥?rnm_dir而不是rnm_dir。以这种方式传递数据时,不需要?

未来发现此问题的快速方法是使用PHP函数print_r($_GET);查看服务器端的实际接收数据。

+0

是的,谢谢。这样一个愚蠢的事情可以忽略!... – Elen