帮我正确地进行AJAX通话

时间:2011-06-10 05:57:23

标签: javascript ajax yui

我有一个正在调用的JavaScript函数。我需要让它调用PHP函数并返回true / false。

具有该功能的脚本位于文件/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库。我需要打电话给它,还是在这种情况下没有必要?

2 个答案:

答案 0 :(得分:2)

  

如何在PHP脚本中调用实际函数?

你做不到。您请求URI。

编写一个调用所需函数的PHP脚本,并将其放在您调用的URI中。

(您可以使用查询字符串等作为用于有条件地调用不同函数的if语句的输入)

  

我是否绝对需要返回一些XML?或者有没有办法只返回返回的值?

您可以返回任何类型的数据。

  

我正在使用YUI JS库。我需要打电话给它,还是在这种情况下没有必要?

这是一个图书馆。你永远不需要打电话给它。它通常简化了您必须编写的代码。

答案 1 :(得分:1)

  
      
  1. 如何在PHP脚本中调用实际函数?
  2.   
  3. 我是否绝对需要返回一些XML?或者有没有办法只返回返回的值?
  4.   

好吧,你没有调用实际的功能。你想要做的是使用GET传递变量,也就是说,通过将它们附加到像file_name.php?var1=this&var2=that这样的URL来传递var1的“this”和var2等于“that”。您可以使用$_GET['this']$_GET['that']在PHP文件中检索它们。无论PHP通过echo输出到页面,print_r等,都会在请求对象中作为其responseText属性的一部分发回。

您只需将url中的request.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为false,因此您可以这样做:

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