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 に答える