2011-01-31 64 views
1

我用ajax這樣獲得來自服務器的數據獲得的數據:(編者)

$(document).ready(function() 
{ 
    setInterval(function() 
    { 
    $.get('/forms/requestProcessor.php', function(data) 
    { 
     $("#shout").append(data.question+'<br>'); 
     alert('Load was performed.'); 
    },'JSON'); 
    }, 5000); // 5 seconds 
}); 

在PHP文件,我發送的數據是這樣的:

while($row=mysql_fetch_array($result)) 
{ 
    $question=$row['Question']; 
    $choice1=$row['Choice1']; 
    $choice2=$row['Choice2']; 
    $choice3=$row['Choice3']; 
    $choice4=$row['Choice4']; 

    $return_data->question = $question; 
    $return_data->choice1 = $choice1; 
    $return_data->choice2 = $choice2; 
    $return_data->choice3 = $choice3; 
    $return_data->choice4 = $choice4; 

    echo(json_encode($return_data)); 
} 

它打印「未定義」。但是,如果我將瀏覽器直接指向php文件,它將以json格式正確顯示數據

+0

我做了它的工作使用$ .getJSON函數,而不是使用$不用彷徨()函數......然而,正如我在上面所指出的,如果我使用回聲裏面的while循環,它不工作...如果我在while循環外使用回聲,我將只得到我的查詢的最後一行...有人能告訴我如何克服這個問題? – CuriousCoder 2011-01-31 04:44:21

回答

2

是的,這是可能的最簡單的方法是返回json_encoded字符串。所以你的代碼看起來像這樣 PHP:

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 

    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT"); 

    header("Cache-Control: no-cache, must-revalidate"); 

    header("Pragma: no-cache"); 

    header("Content-type: text/x-json"); 

    echo json_encode($array); 

    exit(0); 

和JavaScript是這樣的:

$.get('/forms/requestProcessor.php', function(data) 
{ 
    .... 
}, 'json'); 
1

它看起來好像您正在接收結果字符串,其中沒有真正的結構。

如果你願意,你可以在你的編碼任何數據你是想發回的JSON形式使用json_encode(),並改變你的$.get()請求期待JSON的設置,這樣你可以簡單地通過data.choice2等訪問它們..

例如

$return_data->question = $question; 
$return_data->choice1 = $choice1; 
$return_data->choice2 = $choice2; 
... 
$return_data->choice5 = $choice5; 

echo json_encode($return_data); 

,然後你$.get()

$(document).ready(function() 
{ 
    setInterval(function() 
    { 
    $.get('/forms/requestProcessor.php', function(data) 
    { 
     $("#shout").append(data+'<br>'); 
     alert('Load was performed.'); 
    },'json');    //<-- added, last argument to expect 'json' 
    }, 5000); // 5 seconds 
}); 

現在數據將以json格式返回,並且將由jQuery解析,因爲它預計它是json。

所以,你可以現在語句訪問數據在你的成功之類的函數data.questiondata.choice1等..

+0

嗨...這是工作,如果我不包括'json'$ .get()函數...但是,如果我包括'JSON',沒有任何事情發生 – CuriousCoder 2011-01-31 01:58:36

1

肯定。如果將它放入<p></p>對中,會更容易,但是您對數據所做的操作是將其放入DOM節點中。 jQuery非常樂意讓您再次獲得這些DOM節點的結果out

但是你可以讓生活對自己更容易,如果你有PHP回報JSON,像

[ question, ans1, ans2, ans3, ans4] 

,甚至更好,因爲

{ "question" : "my question text", 
    "answers" : [a1,a2,a3,a4] 
} 
0

在PHP中可以存儲在一個陣列響應,並使用json_encode函數轉換它。在jQuery之前,您可以使用$ .parseJSON檢索json(數據)

0

您必須使用jQuery.parseJSON這個..

例如:

"var obj = jQuery.parseJSON('{"name":"John"}'); 
alert(obj.name === "John");" 

click me to know briefly