1

我想访问不起作用的范围之外的变量

$.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"}]
4

2 回答 2

1

因为您在回调中声明变量。

尝试

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 函数是异步的。因此,在服务器响应之前,您将无法使用您的变量。

于 2013-03-04T19:37:03.943 回答
1

如果您想访问函数范围之外的变量,那么您只需要在外部定义它并在调用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);
}
于 2013-03-04T19:37:10.507 回答