2011-06-13 135 views
1

不确定为什么以下不起作用。我希望有人能够阐明一些看法。使用jQuery调用ajax函数后更新全局变量

我有一个全局参数reresenting某个项目在数据库中的某个id。现在为了检查数据库是否应该更新或者应该为这个项目创建一个新条目,我在进行ajax调用之前检查是否设置了变量。如果设置了变量,我知道我必须更新数据库,如果它没有设置,我知道我必须插入数据库。然后在服务器端,我会在插入的情况下返回一个新生成的ID,或者在更新的情况下只返回旧的ID。我使用jQuery的形式和验证插件的方式(因此函数调用ajaxSubmit())。但是,submitHandler的成功函数中的赋值似乎不起作用(我已检查data.poiId是否返回可疑结果)。

$(document).ready(function() { 

    // Function which examines window.location.href and extracts a numerical id if there is one specified in the query 
    var id = getParameter('poiId') 

    ... 

    }, 
    submitHandler : function(form) { 
     var str = 'submitPOI.php'; 
     if (id.length > 0) str += '?poiId=' + id; 

     $(form).ajaxSubmit({ 
      url : str, 
      type : 'POST', 
      dataType : 'json', 
      success : function(data) { 
       id = data.poiId  // Update POI id with response from server 
      } 
     }); 
    } 

    ... 
}); 
+0

你是否在线检查调试器“id = data.poiId”是否可见(是否未定义)? – 2011-06-13 13:53:57

+0

您可能会在AJAX返回之前继续。一旦AJAX调用完成,代码不会等待它返回,然后继续。你想用这个ID做什么? – 2011-06-13 13:54:21

+0

当用户第一次提交表单(在第一次提交id时没有任何价值)之后立即再次提交表单时,会阻止创建另一个主体。我想这可能是一个计时问题,虽然第二次提交是在成功函数被调用之后。 – MJD 2011-06-13 13:59:46

回答

4

在我看来你的id变量不是全局的,因为它是在$(document).ready()函数中声明的。将它移到函数之外并检查它是否有效。

+0

哇!我多么愚蠢......感谢你指出了这一点。像现在预期的那样工作 – MJD 2011-06-13 14:04:28