2011-06-10 32 views
0

我有一個被調用的JavaScript函數。我需要讓它調用一個PHP函數並返回true/false。幫我正確地做一個AJAX調用

與功能的腳本文件/db/cancel_hike.php在

我現在的JS是這樣的:

function uncancelHike(hike_id) 
{ 
    //var url = "/db/cancel_hike.php; 
    var success = null; 

    var request = window.ActiveXObject ? 
      new ActiveXObject('Microsoft.XMLHTTP') : 
      new XMLHttpRequest; 

    request.open("GET", url , true); 

    request.onreadystatechange = function() 
    { 
      if (request.readyState == 4) 
      { 
       var xmlDoc = request.responseXML; 

       // obtain the array of markers and loop through it 
       markers = xmlDoc.documentElement.getElementsByTagName("marker"); 

       for (var i = 0; i < markers.length; i++) 
       { 
         // obtain the attribues of each marker 
         success = markers[i].getAttribute("success"); 

         if (success == "true") 
         { 
         document.getElementById("success").style.display = 'block'; 
         document.getElementById("warning").style.display = 'none'; 
         document.getElementById("error").style.display = 'error'; 

         } 

         if (success == "false") 
         { 
         document.getElementById("success").style.display = 'none'; 
         document.getElementById("warning").style.display = 'none'; 
         document.getElementById("error").style.display = 'block'; 
         } 
       } 
      } 
    } 

    request.send(null); 

    return false; 
} 

我所遇到的麻煩是:

  1. 如何在PHP腳本中調用實際功能?
  2. 我是否絕對需要返回一些XML?或者有什麼方法可以恢復返回的值?
  3. 我正在使用YUI JS庫。我是否需要打電話給它,或者在這種情況下沒有必要嗎?
+0

我不相信這是* *需要做什麼YUI,但它可以更容易地執行AJAX請求。 – icktoofay 2011-06-10 06:01:31

+0

javascript調用的功能不是php。沒有它不需要返回XML,它可以是文本,HTML,JSON ... – Ibu 2011-06-10 06:02:10

+0

@Ibu謝謝,但我怎麼實際上進行函數調用? – Genadinik 2011-06-10 06:08:45

回答

1
  1. 如何調用PHP腳本中的實際功能?
  2. 我是否絕對需要返回一些XML?或者有什麼方法可以恢復返回的值?

那麼,你不要調用實際的功能。你想要做的就是使用GET傳遞變量,也就是將它們附加到像file_name.php?var1=this&var2=that這樣的URL,以將「this」和var2的var1傳遞給「that」。您可以在$_GET['this']$_GET['that']的PHP文件中檢索它們。無論通過echoprint_r等頁面輸出到頁面的PHP是否作爲其responseText屬性的一部分發回請求對象。

您只需將urlrequest.open設置爲您網站上的網址即可。例如,在你的。js文件:

request.open("GET", "answer_me.php?hike_id=" + hike_id, true); 

而在你的PHP文件:

<?php 
$hike_id = $_GET['hike_id']; 
if ($hike_id < 5) { 
    echo "true"; // echo true would return "1", BTW 
} else { 
    echo "false"; // echo false would return nothing 
} 

需要注意的是,這將只返回一個字符串值,以虛假request.responseText,因此你可以這樣做:

var result = request.responseText; 

if (result === "true") { 
    ... 
    document.getElementById("success").style.display = "block"; 
    ... 
} else { 
    ... 
    document.getElementById("success").style.display = "none"; 
    ... 
} 

你不需要它是XML,尤其是因爲它看起來好像沒有真正使用循環(每次同樣的三個DOM元素都被賦值)。

說實話,對於AJAX,我建議使用像jQuery(或YUI,但我沒有找到它的AJAX stuff直觀)的框架。整個代碼應該是這樣的:

var $success = $("#success"); 
var $error = $("#error"); 

function cancelHikeCallback(data) { 
    var is_success = (data === "true"); 
    $success.toggle(is_success); 
    $error.toggle(!is_success); 
} 

function cancelHike(hikeIdToSend) { 
    $.get("/db/cancel_hike.php", {hike_id: hikeIdToSend}, cancelHikeCallback); 
} 

IMO東西像jQuery的$.ajax$.get$.ajax一種特殊形式)使這種東西更容易閱讀和調試。

jsFiddle Example

2

如何調用PHP腳本中的實際函數?

你不行。您請求URI。

編寫一個PHP腳本,調用所需的函數並將其放置在您調用的URI處。

(可以使用查詢字符串等作爲輸入到if聲明您使用有條件地調用不同的函數)

難道我絕對需要有一些返回的XML?或者有什麼方法可以恢復返回的值?

您可以返回任何您喜歡的數據。

我正在使用YUI JS庫。我是否需要打電話給它,或者在這種情況下沒有必要嗎?

這是一個圖書館。你永遠不需要打電話給它。它通常會簡化您必須編寫的代碼。

相關問題