2013-07-03 52 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; 
    }) 
相关问题