为什么每次都附加数字0和1

时间:2012-04-26 18:36:45

标签: php javascript json

我试图附加一个变量imagename但不是显示文件名,而是追加数字'0'然后打破然后'1'。我想知道为什么附加这些数字而不是文件名? imagename变量循环遍历imageNameArray变量,该变量包含$ _SESSION变量,该变量检索已上载文件的名称,并从上载文件的php脚本中检索$ _SESSION变量。

以下是发生追加的javascript代码:

  function stopImageUpload(success){

var imageNameArray = <?php echo json_encode(isset($_SESSION ['fileImage']) ? $_SESSION ['fileImage'] : null); ?>;
 var result = '';



if (success == 1){
result = '<span class="msg">The file was uploaded successfully!</span><br/><br/>';
for (imagename in imageNameArray)
            {
$('.listImage').append(imageNameArray[imagename]+ '<br/>');

             }

              }
 else {
 result = '<span class="emsg">There was an error during file upload!</span><br/><br/>';
              }

 return true;   
 }

下面是上传文件的PHP脚本,$ _SESSION变量检索文件名:

 <?php

    session_start();

    $result = 0;
    $errors = array ();
    $dirImage = "ImageFiles/";


if (isset ( $_FILES ['fileImage'] ) && $_FILES ["fileImage"] ["error"] == UPLOAD_ERR_OK) {

$fileName = $_FILES ['fileImage'] ['name'];

$fileExt = pathinfo ( $fileName, PATHINFO_EXTENSION );
$fileExt = strtolower ( $fileExt );


$fileDst = $dirImage . DIRECTORY_SEPARATOR . $fileName;

        if (count ( $errors ) == 0) {
            if (move_uploaded_file ( $fileTemp, $fileDst )) {
                $result = 1;


            }
        }

    }

$_SESSION ['fileImage'][] = $_FILES ['fileImage']['name'];

    ?>

<script language="javascript" type="text/javascript">window.top.stopImageUpload(<?php echo $result;?>);</script>

2 个答案:

答案 0 :(得分:2)

因为您在数组上使用for in循环,imageName将等于数组indeces,而不是其值。很像for (i in window),我将列出窗口对象的所有方法和属性。

由于这是一个数组,我强烈建议你使用for(i=0;i<arr.length;i++)类型的循环,因为它更安全......在这两种情况下你都需要替换

$('.listImage').append(imagename + '<br/>');

$('.listImage').append(imageNameArray[imagename]+ '<br/>');

修改

for循环可能对你不起作用,因为我遗漏了一点,因为我认为这很明显。不幸的是,显而易见的事情很容易被忽视......正如Greg向我指出的那样(thx m8):

$('.listImage').append(imageNameArray[i]+ '<br/>');

如果你使用for(i ...)样式循环。为了清晰起见,我只是添加完整的循环:

for(var i=0;i<imageNameArray.length;i++)
{
    $('.listImage').append(imageNameArray[i]+ '<br/>');
}

为了帮助您进一步找出可能导致问题的原因,只显示一个img名称,请在循环开始之前添加此权限:console.log(imageArrayName);并查看您的控制台。数组是否包含多个元素?它说什么?在您使用它时,请尝试添加此行:console.log((imageArray instanceof Array ? 'for' : 'for-in'));。在您发布的JavaScript函数中的任何位置添加此行,但在循环外部以避免将控制台混乱到太多......

让我知道你发现了什么

答案 1 :(得分:0)

因为for (var in array)遍历数组的索引。你应该做的

$('.listImage').append(imageNameArray[imagename] + '<br/>');