2011-07-13 7 views
3

いくつかの値を返す必要があるajaxを持っていますが、while()を使用してmy dbからすべての結果を得ると、返される値は "nothing"です。jsonとwhile()の使い方は?

JS:

$.post("ajax/file.ajax.php", 
    { 
    cache: false 
    }, 
    function(data){ 
    alert(data.region); 
    },'json' 
); 

PHP:

while(!$res->EOF) 
    { 
     header('Content-Type: application/json'); 
     $return_data = array('value'=>''.$res->fields['VALUE'].'','region'=>''.$res->fields['REGION'].''); 
     echo json_encode($return_data); 

     $res->MoveNext(); 
    } 

ので、どのように私はJSONとの間を使用することができますか?

答えて

2

最も簡単な解決策は、配列を作成して、最後に生成する行をarray.pushにすることです。例えば

PHP

$array = array(); 

while(!$res->EOF) { 
    $dataFromDB = array('value'=>''.$res->fields['VALUE'].'','region'=>''.$res->fields['REGION'].''); 
    $array[] = $dataFromDB; //or array_push($array, $dataFromDB); 

    $res->MoveNext(); 
} 

header('Content-Type: application/json'); 
echo json_encode($array); 

JS:

$.post("ajax/file.ajax.php", 
    { 
    cache: false 
    }, 
    function(data){ 
    for(n in data) { 
     alert(data[n].region); 
    } 
    },'json' 
); 

そして出力終了するJSONエンコードされたアレイ。

また、新しいループをエコーする直前に、whileループからヘッダーを移動して置きます。

+0

はなぜ知らないが、その戻っ "undifined"。 –

+0

JSを使って私はちょうど –

+0

の上に追加しました! (ps:すべての回答ありがとう) –

0
 

$.post("ajax/file.ajax.php", 
    { 
    cache: false 
    }, 
    function(data){ 
    //alert(data.region); 
    if(data.region.length>0){ 
     for(var i=0;i<data.region.length;i++) { 
      alert(data.region[i]); 
     } 
    } 
    },'json' 
); 

 
0
header('Content-Type: application/json'); 
$return_data = array(); 

while(!$res->EOF) 
{ 
    $return_data[] = array('value'=>''.$res->fields['VALUE'].'','region'=>''.$res->fields['REGION'].''); 

    $res->MoveNext(); 
} 

echo json_encode($return_data); 

だから、一度だけデータをエコー、それはすべてのデータを持つ配列です。 JSでは、それらをループするだけです。

$return_data = array(); 
while(!$res->EOF){ 
    $return_data[] = array(
     'value' => $res->fields['VALUE'], 
     'region' => $res->fields['REGION'] 
    ); 
    $res->MoveNext(); 
} 

header('Content-Type: application/json'); 
echo json_encode($return_data); 

のjQuery:

$.post("ajax/file.ajax.php", {cache: false}, function(data){ 
    for(var i in data){ 
     alert(data[i].region); 
    } 
},'json'); 
1

は、次の...

PHPを試してみてください。あなたがリストしたPHPコードは、全体として有効ではないjsonの連続するフラグメントを送信しています。

$data = array(); 
while(!$res->EOF) 
{   
    $data[] = array('value'=>''.$res->fields['VALUE'].'','region'=>''.$res->fields['REGION'].''); 
    $res->MoveNext(); 
} 

header('Content-Type: application/json'); 
echo json_encode($data); 
0

は、内容の単一json_encodeを行い、その後、アレイを構築してみて

0

を見て、物事のカップル:

  1. は、ループ内でheader()を使用しないでください。 echoで行うコンテンツの送信後にヘッダーを送信することはできません。コンテンツを送信する前に一度送信してください(json)。
  2. 有効なJSONを送信していません。あなたはそれぞれの結果をエコーので、あなたの出力は次のようになります。

    {"value":"foo1", "region":"bar1"} 
    {"value":"foo2", "region":"bar2"} 
    

    JSON配列は、(http://www.json.org/)括弧内にあることが必要です。

    [ 
        {"value":"foo1", "region":"bar1"}, 
        {"value":"foo2", "region":"bar2"} 
    ] 
    

だから、あなたのクエリ結果のアレイを形成し、その後、符号化されたコンテンツを送信します。

<?php 

$return_data = array(); 
while (!$res->EOF) { 
    $return_data[] = array(
     'value' => '' . $res->fields['VALUE'] . '', 
     'region' => '' . $res->fields['REGION'] . '' 
    ); 

    $res->MoveNext(); 
} 

header('Content-Type: application/json'); 
echo json_encode($return_data); 

?> 
関連する問題