使用ajax来调用php方法

时间:2011-10-01 15:03:33

标签: php ajax jquery

您好我想在我的网站中使用ajax,其中所有请求都通过index.php加载(我使用htacess重写URL)所以当我使用ajax时我总是重新加载当前页面然后使用if(expressio)来检查用户是否使用ajax调用了一个函数,但这导致每次使用ajax时都会重新加载所有页面。

我想知道是否有方法使用ajax在当前页面中调用特定的php方法/函数或属性而不重新加载所有页面。

我正在使用jQuery库来获取ajax

如果有人知道其他一些方法就可以了!

2 个答案:

答案 0 :(得分:0)

ajax的一个主要用途是你异步调用某些东西。大多数情况下使用ajax调用的函数 - 方法确实依赖于相同的php文件(如果不是,那就没关系)和其他你不需要异步调用的东西。

例如,您有一个通过ajax调用的方法,可以在文件中自动填充文本字段(如Google搜索),还有其他您不想执行的内容。

如果你在一些mvc下,那么你有控制器检查这一点,并确保只调用所请求的方法(我已成功完成)。所以在mvc下更容易控制,所有东西都在类......

如果不是在mvc下,那么我猜你必须实现类似控制器之类的东西才能只调用你喜欢的方法。然而,有一个应该被尊重的conition,没有代码应该从类中找到因为它将在“include”上执行,它会像这样: 文件ajax处理程序

1.Check if an ajax call
2.if check false return;
3.if true then get the name of the class file
4. call the desired method (or methods, you have an execution flow predefined during to your needs)

所以可以做到。重要的是不要执行不应该执行的代码,否则会发生不希望的结果(或错误)。

答案 1 :(得分:0)

  

在ajax中我使用当前的url作为请求的动作但是这个   导致重新加载整个页面。

由于你有自己的mvc,它可以像index.php / rt = request / action一样,其中request =控制器的名称(最后是一个类),action是动作的名称(例如,最后是你要求的类控制器内部的方法 mysite.com/rt=user/create 我的观点是你不关心当前的url是什么,你所关心的只是调用正确的类(= action)的正确方法(= action)。

  

登录类在所有页面中都是istantiater,因为它会检查用户是否存在   被记录;

我真的不明白这一点(当你说你的页面是指php文件?),无论我建议(如果还没有),请遵循单一入口点(不需要为ajax调用执行此操作) )我的每个请求只发送到index.php,就像我上面给你看的那样。然后在最顶层的几行代码可以进行登录检查。

最后一件事是什么样的ajax重新加载了所有页面,这是一个例子我如何在文本字段中为自动完成执行ajax:

把它放在head-script-javascript中以建立连接

var request = false;
try { 
  request = new XMLHttpRequest(); 
} catch (trymicrosoft) {                         
  try { 
    request = new ActiveXObject("Msxml2.XMLHTTP"); 
  } catch (othermicrosoft) {
    try {
      request = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (failed) {                  
      request = false;       
    }
  }
}

if (!request) 
  alert("Error initializing XMLHttpRequest!"); 

甚至更好,您可以将它放在一个单独的文件中,并将其包含在您需要的任何地方

然后我使用一个函数进行asunchronous调用,我正在做的是类似于你的需要因为我也从html获取数据并将其传递给php(阅读注释)然后执行sql。

   function getMatch() 
   {
        //get the form values, I have one value here, you get as need as many as you need
        var str = document.getElementById("categ_name").value ;
        var url = "internal.php";//php file to execute
        //now pass the html form parameters to php
        //do you see here controller is defined, it is named asynch
        //then see the action (method of controller class) it is called getMatch
        //then see how I pass the html form data with str, it is the string to match
        //comcateg is the mysql table to get the match
        var params = "rt=asynch/getMatch&data=" +  (str)+"&from=comcateg";

        request.open("POST", url, true);//use post for connect harder to attack, lots of data transfer 

        //Some http headers must be set along with any POST request.
        request.setRequestHeader("Content-type", "application/x-www-form-urlencoded;charset=utf-8");
        request.setRequestHeader("Content-length", params.length);
        request.setRequestHeader("Connection", "close");

        request.onreadystatechange = updatePage;
        request.send(params);

   }////////////////////

然后当answear回来时,将调用此函数,因为我们在代码

中定义了这个函数
   function updatePage() {
     if (request.readyState == 4) {
       if (request.status == 200) 
       { 
                    //test
             var r=request.responseText.split("$$");   

             alert(r[1]);
       } 
       else{
         //alert("status is " + request.status);
         }
     }
   }

我认为现在你可以毫无问题地做到这一点,记住那些被php回应的错误甚至错误所有这些都会在request.responseText中回来。这是一个关于我喜欢的mvc的教程,https://sites.google.com/site/mhabipi/php-reading-material/superMVC.htm?attredirects=0&d=1它是由Kevin Waterson编写的,但遗憾的是phpro.org不再适用了。