3

我正在尝试从模式窗口重命名文件。模式窗口运行良好,用于重命名文件的 php 代码也运行良好。我尝试了许多不同的方式来发送数据而不退出。

表单获取链接图像的值:名称、目录和不同的操作:删除、更新和调整大小。因此,当我单击链接时,它会打开带有这些值的模式窗口(我还注意到,每次单击其他图像链接时该值都是相同的)问题是没有发送任何值。我认为获取值存在问题:例如 val() 是一个 jQuery 方法。.value 是 DOM 元素的属性,我想知道如何解决这个问题。

html代码:

   <div id="dialogo" title="Editar Imagen">
<p class="validateTips">Campo titulo requerido.</p>
    <!--action="" method="post"-->
<form id="update" >
<fieldset>
    <label for="titulo">Titulo</label>
    <input type="text" name="titulo" id="titulo" class="text ui-widget-content ui-corner-all" />
    <label for="Alt">Alt</label>
    <input type="text" name="Alt" id="Alt"  class="text ui-widget-content ui-corner-all" />
    <label for="descripcion">Descripcion</label>
    <input type="text" name="descripcion" id="descripcion"  class="text ui-widget-content ui-corner-all" />
</fieldset>
</form>
   </div>

ajax/jquery 代码:

    <script type="text/javascript">
     $(document).ready(function(){
     var fname=$('a.ico-resize').attr("id");
     var directory=$('a.ico-resize').attr("rel");
     var deletecount=$('a.ico-resize').attr("value");
     $('#titulo').val(fname);
     $('#Alt').val(directory);
     var descripcion = $("input#descripcion").val();
     var dataString = 'descripcion='+ descripcion + '&titulo=' + titulo + '&Alt=' + Alt;
     // var data_string = $("#update").serialize();


// Damos formato a la Ventana de Diálogo
var dialog = $("#dialogo").dialog({
    // Indica si la ventana se abre de forma automática
    autoOpen: false,
    // Indica si la ventana es modal
    modal: true,
    // Largo
    //width: 400,
    // Alto
    //height: 280,
    // Creamos los botones      
    height: 300,
    width: 350,
    buttons: {
        
        'Rename Image': function() {
            // Mostrar Versión de PHP
            $.ajax({
                // Antes de realizar la llamada mostramos el ajax load
                beforeSend: function(){
                    $('#respuestaAjax').html('<img id="loader" src="images/loading.gif"/>');
                },
                //cache: false, // Indicamos que no se guarde en cache
                type: 'post', // Variables GET
                url:'rename_img.php', // srcript a ejecutar
                 data: dataString,
                 
                 //'titulo=titulo&descripcion=descripcion&Alt=Alt',
                 
                 //$("form#update").serialize(),

                 //{"file":fname,"directory":directory, "descripcion":descripcion},  // paso de datos
                // cuando es exitoso el llamado
                    success: function(response){
                     $('#respuestaAjax').html(response);
                    $('#' + deletecount).remove();
                        dialog.dialog( "close" );
                }
            });
        },
        Cerrar: function() {
            // Cerrar ventana de diálogo
            dialog.dialog( "close" );
        }
    }
});

     $("a.ico-resize").click( function(e) {
         e.preventDefault();
         // dialog.dialog("open");
           dialog.dialog('open');
    // prevent the default action, e.g., following a link
    return false;
          });
          });
                   
        </script>

php代码:

    <?php 

     $dir = $_POST['Alt'];
     $file = $_POST['titulo'];
      $nuevo= $_POST['descripcion'];
     $img  = $dir."/".$file;
     $imagen =  $dir."/".$nuevo;

     //unlink ($img);
      rename($img, $imagen);
      echo $imagen;
      ?>

解决了

最后一切都适用于这段代码:

          <script type="text/javascript">
        
         $(function(){
          var fname=$('a.ico-resize').attr("id");
          var directory=$('a.ico-resize').attr("rel");
          var deletecount=$('a.ico-resize').attr("value");
          $('#titulo').val(fname);
          $('#Alt').val(directory);
          var descripcion = $('#descripcion').val(); 
          var data_string = $("#update").serialize();
          var dialog = $("#dialogo").dialog({
    
        autoOpen: false,    
        modal: true,    
        height: 300,
        width: 350,
        buttons: {
        
            Send: function(){
            
            str = $("#update").serialize();
                
                $.ajax({
                    
                    beforeSend: function(){
                        $('#respuestaAjax').html('<img id="loader" src="images/loading.gif"/>');
                    },
                    cache: false, 
                    type: 'POST', 
                    url:'rename_img.php', 
                    data: str,
                    contentType: "application/x-www-form-urlencoded", 
                    success: function(response){
                        
                         $('#respuestaAjax').html(response);
                         $('#' + deletecount).remove();
                         dialog.dialog( "close" );
                    }
                });
                },
                Cerrar: function() {
                    dialog.dialog( "close" );
                }
            }
        });

            $("a.ico-resize").click( function(e) {
        
              var id = $(this).attr('data-id');
              var rel = $(this).attr('data-rel');
              var value = $(this).attr('data-value');
             $("#update").find("#titulo").val(id);
             $("#update").find("#Alt").val(rel);
            
            dialog.dialog('open');
        });
        });
                   
        </script>
4

2 回答 2

1

就发送本身而言,代码看起来很好。我的意思是它可能确实发送了请求,它只是错误的查询。(您可以在萤火虫的控制台中检查请求是否真的发送)。

您需要更改的是构建数据字符串的位置。一旦页面加载(在$(document).ready函数中)就构建它,因此在您更改模式窗口中的值后它永远不会重建。

您应该将负责构建 dataString 的代码移至a.ico-resize.

我也看不到tituloandAlt变量的设置位置,正如您在 Firebug 中看到的那样,它们设置错误。

试试这个:

var dataString = 'descripcion='+ $('#descripcion').val() + '&titulo=' + $('#titulo').val() + '&Alt=' + $('#Alt').val();
于 2012-10-05T18:04:02.050 回答
0

dataString 值应该是这样的 JavaScript 对象

{Key:value, key : value .....}
于 2012-10-05T18:06:20.220 回答