2017-05-17 12 views
1

に未定義の「プッシュ」プロパティを読み取ることができませんか? console.log(data)が機能します。は、アレイ

var myScanObj = { 
    $el: null, 
    $res: null, 
    $searchButton: null, 
    $resetButton: null, 
    $hiddenInput: null, 
    $scanInput: null, 
    $selectType: null, 
    barcodes: [], 
    init: function() { 
    myScanObj.cacheDom(); 
    myScanObj.bindEvents(); 
    }, 
    cacheDom: function() { 
    $el = $('.formControl'); 
    $res = $('#result'); 
    $searchButton = $el.find('#searchButton'); 
    $resetButton = $el.find('#resetButton'); 
    $hiddenInput = $el.find('input[name=hiddenField]'); 
    $scanInput = $el.find('input[name=myScan]'); 
    $selectType = $el.find('#myType'); 
    }, 
    bindEvents: function() { 
    $searchButton.on('click', this.addBarcode.bind(this)); 
    }, 
    addBarcode: function() { 
    var postForm = { 
     'myType': $selectType.val(), 
     'myScan': $hiddenInput.val() 
    }; 
    $.ajax({ 
     url: "test.php", 
     type: "POST", 
     data: postForm, 
     dataType: "text", 
     success: this.successAjax 
    }); 
    }, 
    showBarcode: function() { 

    }, 
    successAjax: function(data) { 
    this.barcodes.push(data); 
    console.log(data); 
    } 
}; 

myScanObj.init(); 

これは私test.phpをコードです:

<?php 
    $output = ''; 
    $output .= $_POST["myType"]; 
    $output .= $_POST["myScan"]; 
    echo $output 
?> 
+2

'successAjax'関数の' this'があなたのオブジェクトを参照していないからです。 –

+1

AJAXの成功の中にある[$(this)]の重複の可能性があります(http://stackoverflow.com/questions/6394812/this-inside-of-ajax-success-not-working) – John

答えて

0

問題があります。

:あなたはIE、矢印関数の古いバージョンをサポートしていない気にしない場合は、

success: this.successAjax.bind(this) 

または:あなたは参照がbind()を使用しての下で呼び出された範囲を変更することができます。この問題を解決するには

success: data => this.successAjax(data) 
0

this.barcodesはあなたが押した瞬間にrecorgnizedされていません。私はthisがmyScanObjではなくajaxオブジェクトにrefferingしていると思います。

試し:successAjax機能でthisは、AJAX呼び出しで使用jqXHRではなく、あなたのmyScanObjオブジェクトへの参照であるため、myScanObj.barcodes.push(data);

+0

これはうまくいくかもしれませんが、オブジェクト内のロジックを変数名に結び付けるので理想的ではありません。理想的には、2つは完全に分離しているべきです –