2011-11-25 42 views
1

我有一個表單,我需要通過AJAX發送數據。整個想法一旦選擇了表單數據,通過jQuery.get()發送的ajax調用將調用另一個函數,該函數接收並解碼PHP中的數據,並將該數據用作id以從數據庫獲取更多數據。然後將數據庫中的數據重新編碼併發送到一個javascript函數,該函數根據傳遞的內容打印更多數據。Ajax拒絕在非常奇怪的情況下發送數據

我的問題是,我隨時在參考$_GET$_POST使用<?php ?>標籤在javascript函數,我得到一個錯誤告訴我,我的javascript函數是未定義的。我知道這是部分,至少,因爲當我刪除$_GET/$_POST superglobal AJAX調用確實發送。

任何幫助,這將不勝感激。

這裏是我的代碼:

jQuery.noConflict();   

function printSubCategories(categories) { 

    for (var i = 0; i < categories.length; i++) { 

     var opt = document.createElement('option'); 

     opt.text = categories[i]['name']; 
     opt.value = categories[i]['id']; 

     jQuery('#subcategories').append(opt); 
    }  
} 

function recieveAndPrint() { 
<?php 
    $categories = getCategories(json_decode($_GET['parent'])); 
?> 
    printSubCategories(<?=json_encode($categories)?>); 
} 

function ajaxCategories(pathToFile, ajaxData) { 
    jQuery.get(pathToFile, {'parent' : ajaxData}, function(ajaxData) { 
     //alert('Data loaded: ' + ajaxData + <?=json_encode($_POST)?>); 
    }); 

    recieveAndPrint(); 

} 
+0

您確定在您的動態輸出函數中沒有發生javascript編譯錯誤。這肯定會導致你所描述的行爲?你能給我們在錯誤情況下的js輸出嗎? – j0tt

回答

2

我懷疑你感到困惑的AJAX是如何工作的。看起來您期望AJAX調用可以與位於同一頁面上的PHP一起工作,而頁面只加載一次。這不準確;你需要的是在服務器上調用的另一個php頁面,該頁面將數據作爲JSON返回到原始頁面。您的回調也存在問題,因爲在調用receiveAndPrint()之前數據不會準備好;它需要在回調中調用(但由於接收部分已經完成,所以它只會在打印)。

比方說,你有兩個PHP文件,a.php和b.php。第一個將用於顯示初始頁面,並將調用第二個來檢索特定實例parent的新數據。

a.php只會

jQuery.noConflict();   

function printSubCategories(categories) { 

    for (var i = 0; i < categories.length; i++) { 

     var opt = document.createElement('option'); 

     opt.text = categories[i]['name']; 
     opt.value = categories[i]['id']; 

     jQuery('#subcategories').append(opt); 
    }  
} 


function ajaxCategories(pathToFile, ajaxData) { 
    jQuery.get(pathToFile, {'parent' : ajaxData}, function(data) { 
     printSubCategories(data); 
    }); 
} 

稱爲

ajaxCategories('/b.php','value_of_parent'); 

b.php

<?php 
    $categories = getCategories(json_decode($_GET['parent'])); 
    header('Content-type: application/json'); 
?> 
<?=json_encode($categories)?> 

您可能還希望確保響應不被緩存。

header('Cache-Control: no-store'); 
+0

謝謝,這是一個巨大的幫助。但是,我需要確保傳遞給其他表單的數據能夠恢復到傳遞的原始表單。我將如何做到這一點?我是否需要在我的b.php文件中放置一個ajax javascript函數,它會以某種方式將編碼後的數據傳遞迴a.php? – zeboidlund

+0

不,第二個php文件只傳遞數據。它將作爲jQuery get函數的回調函數中的data參數接收。這是在客戶端上運行的部分,用於接受來自第二個正在調用的PHP文件的數據。 – tvanfosson

+0

好的,非常感謝! – zeboidlund