1

我有这样的功能:

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 在警报中显示正确的价值。

4

2 回答 2

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);
});
于 2013-07-03T17:21:13.267 回答
0

试试这个:

var record_no= '';

   $.get(root+"/blocks/stickynotes/max_records.php", function(resp) {
      alert(resp);
      record_no+=resp;
   })
于 2013-07-03T17:20:55.367 回答