2

データをロードしてデータを入力するためのコンボ選択と AJAX 呼び出しがあります。

<select id="order_products"><option value="0">Loading data...</option></select>

var kmx = jQuery.noConflict();
function loadProducts() {
        var myProductSelect = kmx('#order_products');
        myProductSelect.empty();
        myProductSelect.append("<option value='0'>Loading data...</option>");
        kmx.ajax({
            type: "POST",
            url: baseurl,
            data: urlquery_ajax + "getOrderProductsInJsonFormatAjax&order_id=" + order_id + '&not_linked=1',
            success: function(data){
                        data = kmx.parseJSON(data);
                        populateCombo(myProductSelect, data, 'Select Product');
                     },
             failure: function(msg){
                        msg = kmx.trim(msg);
                        alert('Error: ' + msg.responseText);
                      }
        });
    }
    /**
    * Populate the combo
    */
    function populateCombo(myComboObj, myData, myText) {
        myComboObj.empty();
        myComboObj.append("<option value='0'>" + myText + "</option>");
        kmx.each(myData.rows, function(index,item) {
            myComboObj.append('<option value="' + item.id + '"' + '>' + item.number + '</option>');
        });
    }

特別なことは何もありませんが、コードを実行すると問題が発生します: ページが白くなります! ページのコードソースすら見えない!

しかし、変数を追加すると:

var myProductSelect = kmx('#order_products');

成功メソッドに入力すると、関数を呼び出してデータを入力する前に、次のように機能します。

success: function(data){
data = kmx.parseJSON(data);
var myProductSelect = kmx('#order_products'); // <<<<<-----
populateCombo(myProductSelect, data, 'Select Product');
},

それで、私は問題が何であるかを理解したいですか?AJAX の変数スコープ、クロージャ、および非同期呼び出しに関する投稿を読みましたが、まだ自分の問題を理解していません。

4

0 に答える 0