0

この ImageUpload 機能は機能しますが、新しい写真をアップロードするたびにコピーが追加され続けます。それは私が欲しいものではありません。最初の画像をアップロードすると、正常に機能します。1 つの画像がサーバーにアップロードされます。しかし、新しい写真を選択または撮影すると、同じ写真が 2 つアップロードされます。私がアップロードする 3 番目の画像は 3 回アップロードされ、次の 4 回はアップロードされるたびにコピーが増えます。アプリを再起動した場合のみ、1 部のアップロードから再び開始されます。何が悪いのか、またはアップロードプロセス後に「selectedImage」をリセットする方法を誰かが見てくれることを願っています。

//this variable will hold the image data blob from the device's gallery or camera
    var selectedImage = null;

    var buttonSelectImage = Titanium.UI.createButton({
        width:240,
        height:50,
        top:242,
        title:'Select image'
    });

    buttonSelectImage.addEventListener('click', function(e){
        dialog.show();
    });

    var buttonUpload = Titanium.UI.createButton({
        width:240,
        height:50,
        top:304,
        title:'Send to site'
    });

    //our dialog with the options of where to get an image from
    var dialog = Titanium.UI.createOptionDialog({
        title: 'Choose source...',
        options: ['Camera','Album','Cansel'],
        cancel:2
    });

    //Dialog event listener
    dialog.addEventListener('click',function(e){
        Ti.API.info('You selected… ' + e.index);
        if(e.index == 0){
        //from the camera
        Titanium.Media.showCamera({
        success:function(event){
        selectedImage = event.media; 
        if(event.mediaType == Ti.Media.MEDIA_TYPE_PHOTO){
        imageThumbnail.image = selectedImage;
        win.add(imageThumbnail);            
        }
        buttonUpload.addEventListener('click', function(e){
        if(selectedImage != null) {
        postToSite();
        }else{
        alert('You must choose a image!');
        }
        });
        win.add(buttonUpload);
        buttonUpload.show();
        },
        cancel:function(){
        //getting image from camera was cancelled
        },
        error:function(error){
        // create alert
        var a = Titanium.UI.createAlertDialog({title:'Camera'});
        // set message
        if (error.code == Titanium.Media.NO_CAMERA){
        a.setMessage('Your cellphone lack the camera function!');
        }else{
        a.setMessage('Unexpected error: ' + error.code);
        }
        // show alert
        a.show();
        },
        allowImageEditing:true,
        saveToPhotoGallery:true
        });
        }
        else if(e.index == 1){
        //obtain an image from the gallery
        Titanium.Media.openPhotoGallery({
        success:function(event){
        selectedImage = event.media;
        // set image view
        Ti.API.debug('Our type was: '+event.mediaType);
        if(event.mediaType == Ti.Media.MEDIA_TYPE_PHOTO){
        // set image view
        imageThumbnail.image = selectedImage;
        win.add(imageThumbnail);
        }
        buttonUpload.addEventListener('click', function(e){
        if(selectedImage != null) {
        postToSite();
        }else{
        alert('You must choose a image!');
        }
        });
        win.add(buttonUpload);
        buttonUpload.show();        
        },
        cancel:function(){
        //user cancelled the action fron within the photo gallery
        }
        });
        }else{
        //cancel was tapped user opted not to choose a photo
        }
    });
    win.add(buttonSelectImage);

    function randomString(length,current){
    current = current ? current : '';
    return length ? randomString( --length , "abcdefghiklmnopqrstuvwxyz".charAt( Math.floor( Math.random() * 60 ) ) + current ) : current;
    }
    //Post to server
    function postToSite(){
        //create the httpRequest
        var xhr = Titanium.Network.createHTTPClient();
        xhr.onerror = function(e)
            {
                Ti.UI.createAlertDialog({title:'Error', message:e.error}).show();
                Ti.API.info('IN ERROR ' + e.error);
            };
            xhr.setTimeout(40000);
            
        xhr.onsendstream = function(e){
                
                ind.value = e.progress ;
                Ti.API.info('ONSENDSTREAM - PROGRESS: ' + e.progress);
                ind.show();
            };
                
        // Get the sessionID
        var sessionId = Titanium.App.Properties.getString("sessionId");
        
        //open the httpRequest
        xhr.open('POST','http://example.com/index.php?include=app_support/upload.php&session_id='+sessionId);
            activityIndicator.show();
            buttonUpload.hide();
        xhr.onload = function(){
            //the image upload method has finished
            var json = this.responseText;
            var response = JSON.parse(json);
            if (response.auth == 'false'){
                alert('User validation failed');
            }
            else if (response.upload_status == 'success'){
                ind.hide();
                activityIndicator.hide();
                buttonUpload.hide();
                alert(response.message);
            }else{
                ind.hide();
                activityIndicator.hide();
                buttonUpload.show();
                alert(response.message);
            }
        };
        //send the data
        var r = randomString(5) + '.jpg';
        xhr.send({'form_data[file][value]': selectedImage, 'value': r});
    }
4

1 に答える 1

0

これが問題の原因である可能性があります。

dialog.addEventListener('click',function(e) {
...
  buttonUpload.addEventListener('click', function(e){

クリックイベントにクリックリスナーを追加しています。したがって、最初のクリック イベントが実行されるたびに、別のクリック イベントが buttonUpload に追加され、最初のクリック イベントが呼び出された回数だけ実行されます。

于 2012-08-13T08:33:50.730 に答える