1

変数imagenameを追加しようとしていますが、ファイル名を表示する代わりに、数字「0」を追加し、次に「1」を中断します。ファイル名ではなくこれらの番号を追加する理由を知りたいのですが?imagename変数は、アップロードされたファイルの名前を取得する$ _SESSION変数を含むimageNameArray変数をループし、その$ _SESSION変数は、ファイルがアップロードされたphpスクリプトから取得されます。

以下は、追加が発生する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;   
 }

以下は、ファイルをアップロードし、$_SESSION変数がファイル名を取得するphpスクリプトです。

 <?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>
4

2 に答える 2

2

for in配列でループを使用しているためimageName、値ではなく配列のインデックスに等しくなります。と同じようfor (i in window)に、ウィンドウオブジェクトのすべてのメソッドとプロパティを一覧表示します。

これは配列であるため、for(i=0;i<arr.length;i++)一種のループを使用することを強くお勧めします。これは、安全性が高いためです...どちらの場合も、置き換える必要があります。

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

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

編集

forループは、明らかだと思ったので、少し省略したため、おそらく機能しません。残念ながら、明らかなことは見落としがちです...グレッグが私に指摘したように(thx m8):

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

for(i ...)スタイルのループを使用する場合。わかりやすくするために、完全なループを追加します。

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

img名が1つしか表示されない場合に問題の原因をさらに突き止めるために、ループが始まる直前にこれを追加console.log(imageArrayName);して、コンソールを確認してください。配列に複数の要素が含まれていますか?それは何と言っていますか?その間、次の行も追加してみてくださいconsole.log((imageArray instanceof Array ? 'for' : 'for-in'));。投稿したJavaScript関数の任意の場所にこの行を追加しますが、コンソールが乱雑にならないようにループの外側に追加します...

あなたが見つけたものを教えてください

于 2012-04-26T18:43:00.557 に答える
0

for (var in array)配列のインデックスを反復処理するためです。あなたがしている必要があります

$('.listImage').append(imageNameArray[imagename] + '<br/>');
于 2012-04-26T18:41:14.990 に答える