1

次のコードを使用しています。

 var frontPic = e.target.files[0]
 var frontPicName = frontPic.name
 var salonId=$("#salonId").val()
 upload = new Upload(frontPicName, salonId)
 upload.resize(frontPic)

次のコードを呼び出すには

function Upload(filename, salonId){

    var form = new FormData()
        form.append("filename", filename)
        form.append("salonId", salonId)
};

Upload.prototype.resize = function(file){
    $.canvasResize(file,
    {
        width: 400,
        height: 0,
        crop: false,
        quality: 100,
        callback: function (data)
        {
            alert(data)
            // Add file data
            this.form.append("file", $.canvasResize('dataURLtoBlob', data));
            $('body').css("background", "url("+data+")")
        }
    });
}

私のアラート(データ)は正常に機能しているように見えるので、実際のサイズ変更アクションは正常に見えます。

ただしthis.form is undefined、行のエラーが発生していますthis.form.append("file", $.canvasResize('dataURLtoBlob', data));

正しい構文は何でしょうか?

4

2 に答える 2

2

コードに 2 つの問題があります。

  1. form、オブジェクトのプロパティとしてではなく、コンストラクターでローカル変数として宣言されます。

  2. thisコールバック関数内でuploadオブジェクトを参照していません。ローカル変数に格納する必要があります。

function Upload(filename, salonId){

    this.form = new FormData()
    this.form.append("filename", filename)
    this.form.append("salonId", salonId)
};

Upload.prototype.resize = function(file){

    var self = this;

    $.canvasResize(file,
    {
        width: 400,
        height: 0,
        crop: false,
        quality: 100,
        callback: function (data)
        {
            self.form.append("file", $.canvasResize('dataURLtoBlob', data));
            $('body').css("background", "url("+data+")")
        }
    });
}
于 2013-03-04T02:44:37.203 に答える
1

thisおそらく他の何かにスコープされています。を呼び出す前に参照を作成する必要があります$.canvasResize

Upload.prototype.resize = function(file){
    var self = this;
    $.canvasResize(file,

に置き換えthisますself

于 2013-03-04T02:43:32.673 に答える