2013-03-07 72 views
0

首先讓我說,我從來沒有使用過JSON或AJAX,但我認爲我至少理解了這個概念。成功將json_encode的變量從PHP傳遞到外部.js文件?

我只是想將一些PHP值傳遞給jquery函數(位於外部.js文件中)。我嘗試了所有我可能想到的,並且不知道這裏發生了什麼問題。

在index.php文件,我有:

<?php 
$data = array(1 => 'thisor', 2 => 'thatttt'); 
echo json_encode($data); 
?> 

..這顯然不是我想通過真實的數據,但它只是用於測試。 在我的js文件我具備的功能:

$.getJSON("index.php", function(data){ 
    alert('data loaded' + data); 
    }) 
    .error(function() { alert("error"); }); 

每一次,它拋出的錯誤。不過,我注意到如果我使用$ .post後面跟着相同的確切代碼,它不會再拋出錯誤,並返回數據。

此外,是否有必要'回聲'json_encode?如果我不希望這些信息顯示在我的網頁上怎麼辦?或者..我可能在這裏誤解了一些東西。另外x2,如果值得注意,我讀了'header('Content-type:application/json');'這可能需要進入PHP文件..但是當我這樣做時,它不再呈現瀏覽器中的網頁,而是以純文本格式輸出內容。我需要在其他地方做這個/做另一個外部PHP文件?

對於任何荒謬問題的道歉,這真的是我第一天想學這個東西。

+0

你可以使用'$ .post'和使用'JSON.parse(數據)'來獲得JSON對象。此外,我會建議分開的PHP和HTML到不同的文件。因此,您可以使用'getJson.php'來發送json和'index.php',它只包含'html'和javascript以發送請求。 – 2013-03-07 00:22:59

+0

打印的唯一東西應該是JSON數據。你不應該把它和你的主頁的內容混雜在一起(getJSON()'知道怎麼讀?)。 – kapa 2013-03-07 00:25:46

+0

是的,你需要'echo json_encode(...)'。當你使用AJAX時,腳本的輸出被AJAX回調函數讀取,它不會顯示在網頁上(除非回調函數顯示它)。 – Barmar 2013-03-07 00:38:46

回答

1

它適用於我。你確定唯一的輸出是jon字符串嗎? index.php文件中還有其他的東西嗎?

當使用.post的$,試着改變你的警惕:

alert('data loaded(' + JSON.stringify(data)+')'); 

,並檢查所有你看到的是JSON字符串。

既然你說index.php文件也輸出其他的東西,這裏是你可以做的一個例子(我不是說這是好的做法)。所以,你可以寫類似於這樣您的index.php文件:

<?php 
if(isset($_GET['ajax'])) { 
    $data = array(1 => 'thisor', 2 => 'thatttt'); 
    echo json_encode($data); 
    exit; 
    } 
?> 
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"> 
</script> 
<script type="text/javascript"> 
<!-- 
$.post("index.php?ajax", function(data){ 
    alert('data loaded(' + JSON.stringify(data)+')'); 
    }) 
    .error(function() { alert("error"); }); 
// --> 
</script> 
+0

不,這不是..我想我已經誤解了這是如何完成的。它輸出頁面上的所有數據。 編輯:一個人如何去做這件事?如果我有一個'index.php'頁面,我需要使用jQuery來操作其中的變量。我需要另一個.php文件來執行json_encode()?很困惑。 – 2013-03-07 00:43:30

+0

您可以調用另一個php文件,或者您可以編寫index.php文件,以便在接收到ajax請求(可能使用查詢字符串來表明它是ajax請求)時,它會輸出JUST json字符串,然後立即退出。 – 2013-03-07 00:48:36

+0

現在更有意義。謝謝! – 2013-03-07 00:57:15