我想访问不工作的作用域外的变量
$.getJSON("ajax_files/getSingleRow.php?id="+id+"&type="+type, function(json){
var json = json[0];
$.each(json, function (key, val) {
//alert(key + '=' + val);
$("#"+key).val(val);
});
});
现在我想在这里使用那些不起作用的变量
alert(json.id);
下面是getSingleRow.php的json变量格式
$results = array();
while($rw = $oAppl->row($res)) {
$results[]=array(
'id'=>$rw['id'],
'ref'=>$rw['ref'],
'name'=>$rw['name'],
'description_demo'=>$rw['description_demo']
);
}
echo json_encode($results);
[{"id":"1","ref":"RH-R-1","name":"","description_demo":"this is desc test"}]
因为您在回调中声明变量。
试
var json = null;
$.getJSON("ajax_files/getSingleRow.php?id="+id+"&type="+type, function(json){
json = json[0];
$.each(json, function (key, val) {
//alert(key + '=' + val);
$("#"+key).val(val);
});
});
此外,不要忘记$。getJSON函数是异步的。因此,在服务器响应之前,您将无法使用您的变量。
如果您想访问函数作用域之外的变量,那么您只需要在外部定义它并在调用getJSON
时设置该变量。
这种方法有一个问题。由于该函数是回调函数,因此它将在请求完成时执行,如果它只是调用getJSON
之后的一行代码,则可能在调用警报之后执行。所以你需要限制它。在下面的示例中,在回调执行结束时调用了一个函数。
var externalJson;
$.getJSON("ajax_files/getSingleRow.php?id="+id+"&type="+type, function(json){
externalJson = json[0];
$.each(externalJson, function (key, val) {
//alert(key + '=' + val);
$("#"+key).val(val);
});
// Function used to gate attempt to access JSON content until it has been processed
finishUp();
});
function finishUp() {
alert(externalJson.id);
}