我试图附加一个变量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>
答案 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/>');