2012-09-11 75 views
0

所以我一直在網上挖,發現一個jQuery AJAX解決方案將是我想要做的最好的。真正基本的AJAX(PHP,jQuery)

我發現jquery.ajax()和jquery.post()被提到最多。

但是我發現的信息非常全面,老實說,我有點失落!

我需要創建一個簡單的按鈕,它將充當切換開關。它需要將數據發佈到PHP腳本,該腳本將處理它並返回true或false。該按鈕應顯示設置,或相應地取消設置。

這是一個障礙,結果也依賴於數據庫查找返回true或false,我需要從$ _SESSION安全地獲取信息。由於JavaScript是客戶端,我並不熱衷於將這些數據輸出到用戶可以訪問的內容中。我的問題是,我可以從「被調用」的PHP文件中訪問會話,它仍然可以正常工作(如包含?)。

這裏,我已經找到了最好的基本代碼,但是並不安全,有可能是不正確的..

$("#mydiv").click(function(){ 

var button = $(this) ; 

if (!button.hasClass('active')) { 
    $.post("ajax.php", { user: "2", action: "start" }, 
     function(data){ 
      button.addClass('active'); 
      button.html("End") ; 
     } 
    ); 

} 
else { 
    $.post("ajax.php", { user: "2", action: "stop" }, 
     function(data){ 
      button.removeClass('active'); 
      button.html("Start") ; 
     } 
    ); 
} 


}); 

回答

1

會話變量將在PHP腳本調用可用。請注意,$.post()功能是異步的,並有一個回調參數,在您的情況下稱爲data。這個回調變量將存儲您在$.post()調用的php腳本中回顯的任何內容。

現在,你可以驗證東西,做你喜歡的任何事情(順便說一句,驗證應該總是發生在你的PHP文件,從來沒有在JavaScript,出於安全原因!)。

一個想法是呼應了在驗證後,你的PHP文件"true""false",然後退出PHP腳本,如:

<?php 
    //validate here and store success in boolean $success 
    if($success==true){ echo "true"; exit; } 
    else{ echo "false"; exit; } 
?> 

然後,你的JavaScript回調參數data會有的價值無論是"true""false"。你可以像JavaScript中的其他變量一樣簡單地訪問這個變量,並根據它的值做一些事情。

一種解決方案可能是:

$("#mydiv").click(function(){ 

    var button = $(this) ; 

    if (!button.hasClass('active')) { 
     $.post("ajax.php", { user: "2", action: "start" }, 
      function(data){ 
       if(data=="true"){ 
        button.addClass('active'); 
        button.html("End"); 
       } 
      } 
     ); 
    } 
    else { 
     $.post("ajax.php", { user: "2", action: "stop" }, 
      function(data){ 
       if(data=="true"){ 
        button.removeClass('active'); 
        button.html("Start"); 
       } 
      } 
     ); 
    } 


}); 

這應該做的伎倆。如果您需要返回多個數據點,例如具有屬性的對象,請檢查JSON

+0

謝謝!我可能會錯過顯而易見的內容,但是如何配置我的

+0

從你的代碼看起來你的按鈕的ID爲「#mydiv」 - 像「mybutton」這樣的ID可能更適合。無論哪種方式,您的按鈕的ID必須在那裏。而不是一個按鈕標籤,我會使用一個輸入標籤,然後改變它的值屬性,如下所示:button.attr('value','changed text'); – weltschmerz

+0

感謝您的回覆。但我努力工作。除了包含jQuery,還有什麼我需要做的?單擊按鈕時,我的元素檢查器中的XHR沒有顯示任何請求? –

1

您可以從所謂的PHP腳本中訪問$ _SESSION安全。

我假設您正在打印真實或錯誤的PHP腳本。在這種情況下,您可能需要在回調函數中添加if語句。數據包含php腳本的返回值。

0

如果PHP腳本的答案是成功/錯誤,請考慮使用HTTP標頭來表明這一點,例如,

上失效,呈現:

標題( 「HTTP/1.0 406無法接受」);

這使得你的生活在jquery中變得簡單,因爲你可以隨時爲成功和錯誤編寫處理程序。

爲會議,它應該工作發現,該瀏覽器將通過會話cookie時,它使AJAX請求,PHP將加載正確的會話..

您可以修改上面是這樣的代碼:

$.ajax({ 
    url: 'http://blarg.com', 
    data: { your post data }, 
    success: function(data) { do something }, 
    error: function(o,textStatus) { do Error } 
}); 

退房的API獲取更多詳情:http://api.jquery.com/jQuery.ajax/

+0

感謝您的回覆。那麼上面的代碼應該適合嗎?如何根據請求的結果修改它以更改狀態(即將文本更改爲開始/停止)?/謝謝! –

+0

我添加了一個例子,你只是定義處理程序,這就是它..設置標題爲不可接受,如果其失敗,你會有很好的乾淨的代碼.. – Stephen