json之外的变量jquery php


variable outside json jquery php

我想访问不工作的作用域外的变量

$.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);
}