2013-03-04 62 views
1

我要访问外部的范围变量,不工作变量外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); 

这里是我的JSON varible在getSingleRow.php形成

$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"}] 
+0

您可以显示您的JSON内容吗?你不应该'''var json = json''',因为变量json已经存在。 – SuperSkunk 2013-03-04 19:32:24

+0

我想以后得到它,在这个代码之外..我可以做到这一点吗? – Methew 2013-03-04 19:32:51

+0

你可以在每个函数内部使用'''console.log(key,val)'''吗?我们可以看到JSON是否正常。 – SuperSkunk 2013-03-04 19:33:48

回答

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

+0

alert(json.id);仍不能正常工作 – Methew 2013-03-04 19:42:43

+0

哪部分不工作?如果警报显示空的结果,则意味着服务器尚未返回数据。如果警报根本没有弹出,这意味着你有一个JS脚本错误。在这种情况下,请检查控制台日志F12。 – sdespont 2013-03-04 19:47:19

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