2013-07-03 50 views
0

我有這樣的功能:

jQuery.fn.stickyNotes.createNote = function(root) { 

    var record_no; 

    $.get(root+"/blocks/stickynotes/max_records.php", function(resp) { 
     alert(resp); 
     record_no=resp; 
    }) 

    var note_stickyid = record_no; 
    ... 
} 

的max_record.php看起來是這樣的:

<?php 
    require_once('../../config.php'); 
    global $DB; 

    $max_id = $DB->get_record_sql(' 
        SELECT max(stickyid) as max_id 
        FROM mdl_block_stickynotes 
       '); 
    $stickyid= $max_id->max_id+1; 
    echo $stickyid; 
?> 

我想知道爲什麼records_no中有沒有價值,而RESP是顯示警告正確的價值。

回答

1

這條線是你的問題:

var note_stickyid = record_no; 

$.get()功能上面它是異步的,所以它試圖功能完成之前分配該值。分配變量回調中:

var note_stickyid; 

$.get(root+"/blocks/stickynotes/max_records.php", function(resp) { 
    alert(resp); 
    record_no=resp; 
    note_stickyid = record_no; 
}).done(function() { 
    alert(note_stickyid); //Works because it waits until the request is done 
}); 

alert(note_stickyid); //This will alert null, because it triggers before the function has assigned! 

在你的情況,你可能會想在回調函數來傳遞,所以你實際上可以使用這個變量,這裏是一個示例回調函數:

function callback(param) { 
    alert(param); 
} 

現在設置的另一個參數爲您createNote

jQuery.fn.stickyNotes.createNote = function(root, callback) { 

現在使用回調$.get內:

var note_stickyid; 

$.get(root+"/blocks/stickynotes/max_records.php", function(resp) { 
    alert(resp); 
    record_no=resp; 
    note_stickyid = record_no; 
    callback(note_stickyid); 
}); 
+0

與我現在正在做的事情有何不同?你在回調函數外部聲明一個變量,並在它內部更新它,我正在使用record_no。你的解決方案會引發同樣的問題。它返回空值。 – MiNdFrEaK

+0

@MiNdFrEaK - 你在函數內部分配'record_no',然後試圖在函數外部立即使用它,它不會被分配! – tymeJV

+0

我仍然得到note_stickyid變量的未定義錯誤。 – MiNdFrEaK

0

試試這個:

var record_no= ''; 

    $.get(root+"/blocks/stickynotes/max_records.php", function(resp) { 
     alert(resp); 
     record_no+=resp; 
    }) 
相關問題