2013-03-04 63 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); 
}