2010-06-17 44 views
1

我有一組php函數,我想調用不同的事件,大多數onclick與jquery異步(ajax)。 第一個函數被調用上負載JQuery到PHP函數和後面Ajaxed

$(document).ready(function() 
{ 
    $("#div2").hide('slow'); 
    $("#div1").empty().html('<img src="ajax-loader.gif" />'); 
    $.ajax(
{ 
    type: "POST", 
    url: "WebFunctions.php", 
    data: {'func':'1'}, 
    success: function(html) 
    { 
     $("#div1").show('slow').html(html) 
    } 
}); 

數據:{ 'FUNC': '1'} - >是在PHP端

switch($_POST['func']) 
{ 
    case '1': 
    getParents(); 
    break; 
    case '2': 
    getChilds(params); 
    break; 
    case '3': 
    getChildObjects(params); 
    break; 
    default: 
} 

switch語句「這功能是呼叫到肥皂服務器「< - 無關緊要。

因此,當該函數完成時,我得到一個包含ID和名稱的數組。我回應的名稱,但我想ID的參考,所以當我點擊回顯的名稱,我可以調用其他PHP函數的參數名稱的ID ...

我如何擺脫switch語句? ?我如何正確調用php函數並將params傳遞給它?我怎樣才能保存這個ID,所以當我點擊與該ID的項目另一個PHP函數被稱爲?

PLZ隨意問任何問題,任何答案都是歡迎的。

```````````````````````````` ``編輯``````````````````````````````````````````````````````````````````

$(document).ready(function() 
    { 
     $("#div2").hide('slow'); 
     $("#div1").empty().html('<img src="ajax-loader.gif" />'); 
     $.ajax(
     { 
      type: 'post', 
      async: true, 
      url: "Parents.php", 
      data: {'id' : 12200}, 
      dataType: "json", 
      cache: false, 
      success: function(json_data) 
      { 
       $("#div1").empty(); 
       $.each(json_data, function(key, value) 
       { 
        $("#div1").append('<p class="node"><b>['+key+']</b> => '+value+'</p>'); 
        $(this).data('id', key); 
       }); 
      } 
     }); 
     $("p.node").click(function() 
     { 
      var id = $(this).data('id'); 
      alert('The ID is: ' + id); 
     }); 
    }); 

我得到了json通信工作,但我的問題是數據的東西, 當我點擊一個節點的ID是未定義的......它被打印,但當我點擊它oupsss ..所以問題是我該如何正確附加該ID分別對應

..

回答

0

管理您的ID的一種解決方案是將您的數據編碼爲JSON。這將允許您將整個PHP數組傳遞給Javascript,並讓它本地理解並閱讀ID和名稱。

要編碼您的PHP數組作爲JSON,試試這個:

echo json_encode($my_array); 

(你需要PHP 5.2+這個工作)

這將打印出JSON數據時請求頁面。接下來,在您的JavaScript中爲您的Ajax函數調用添加一個「dataType」參數。類似這樣的:

// Get JSON Data and Save 
$.ajax({ 
    type: "POST", 
    url: "WebFunctions.php", 
    data: {'func':'1'}, 
    dataType: "json", 
    success: function(json_data) { 
     $("#div1").data(json_data); 
    } 
}); 

// Display the ID when clicked 
$("#div1").click(function(){  
    var id = $(this).data('id'); 
    alert('The ID is: ' + id); 
}); 

這告訴Ajax函數期望返回JSON。

當成功函數被調用時,您可以訪問「json_data」變量並查找所有ID和名稱,就像您在PHP中使用它們一樣。然後您需要編寫一些代碼來適當保存這些ID和名稱。然後他們可以在以後使用(即當你點擊按鈕等)。

編輯:我更新了上面的代碼。 JSON數據現在與HTML元素「#div1」關聯,因此您可以在將來參考它。我還添加了一個簡單的點擊事件。每當元素被點擊時,它的ID就會顯示出來。

+0

Tnx這就是我正在尋找的,我沒有嘗試過,但我認爲它會工作.. 我如何保存json數據?當功能成功結束時,他們會收集垃圾嗎?我希望他們堅持...... 我聽說有些地方我可以嘗試添加ID的PHP功能到正確的HTML元素他們回聲,所以我可以選擇他們,並從那裏讀取....你是什麼認爲??這是可行嗎?我聽起來非常忍者風格。 :)再次。 – Xaris 2010-06-17 18:26:49

+0

嗨,Xaris。我已經更新了上面的回覆。它現在將JSON數據保存到HTML元素。這使您可以在將來再次讀取數據。我還添加了一些簡單的代碼,當你點擊HTML元素時顯示ID。希望這是一個粗略的指導,讓你開始。 =) – Wireblue 2010-06-17 22:30:42

+0

我無法將ID保存到元素中,請查看我的編輯.. tnx以獲取幫助。 – Xaris 2010-06-24 13:49:06

1

您可以通過使用將您的請求路由到正確的函數的MVC框架來避免switch語句。例如,使用CodeIgniter REST Server,你可能有以下網址到您的功能:

然後,您可以POST的參數,每個AJAX請求一起。

您可能還希望將您傳遞的ID作爲響應的一部分返回,因此當您請求下一個函數時它將可用。

+0

非常感謝您的時間。這個項目將在joomla網站上託管,所以MVCing它是一個doto ... :)我只是希望有一種方式來指定一個數據函數: – Xaris 2010-06-17 18:19:37