2012-04-04 115 views
1

我现在正在与Ajax进行第一次联系,我有点困惑。我已经阅读了许多问题,但我无法阅读答案,这很可能在某处。如何使用Ajax调用特定的PHP函数和来自JQuery的结果

的情况是,我使用了PHP的做法,和所有我经历的index.php与参数。所以我不打电话给任何其他.php文件在表单帖子,按钮点击..

我创建了一个HTML列表框(我想删除垂直滚动条,但这只是一个奖金来解决),这在我的分类中提供。

现在,通过点击每个类别我想调用某个函数,那么这将产生对其他分区输出。

function swapContent(){ 
$("#myPresentDiv").html('<img src="../../imgs/ajax-loader-big.gif"/>').show(); 
var cat = $('#listbox').val(); 
$("#action").change(alert(cat)); 
var url = "&s=".cat; 
$.post(url, {contentVar: cat} ,function(data) { 
    $("#myPresentDiv").html(data).show(); 
}); 

}

所以,我的jQuery脚本拿起正确的分类,我提醒它提醒对话框,所以我敢肯定,这很好,然后用代码,因为它是在那一刻,我重装我的整个页面,所以我得到,页页页页...

我试图找出如何写JQ Ajax调用,这将返回唯一结果,而不是整个页面。

我可以把URL“的index.php & S =”猫,然后以某种方式告诉Ajax“的经历指数,调用函数displayresults($猫);

希望一切我写的是有意义的你:)

TNX。

回答

0

如果在框架或CMS看在那里,他们基本上有routes,为您的index.php函数调用映射到控制器的方法。

这是一个复杂一个参数,你可以试着开始阅读this文章

1

url是你的ajax函数调用,必须只返回页面部分而不是整个html文档。 如果你有

$.post('ajax.php',data,function(d){ 
    $('#responsediv').html(d).show(); 
}); 

文件ajax.php只能返回页面部分,如

<div>This is the new content</div>  

,所以你不会有网页页面内。

+0

我已经在一些答案中看到了这个,但我不明白这一点。首先,我没有ajax.php。 我可以创建它,但它然后在其中我需要重新创建会话,数据库对象,菜单对象,文章对象,并复制5我现有的类中使用的函数来生成的东西,我实际上只与调用直接链接index.php?p = 112&s = 5。 因此,一般来说,我的JQuery只读取S(猫)号码,并且应该到达类别5数据库中的文章。 – Balkyto 2012-04-04 12:45:20

+0

您不能将ajax调用为相同的index.php,因为它会返回整个html文档。你需要不同的控制页面的Ajax请求。您也可以在这些页面中重复使用index.php中的会话。 – Broncha 2012-04-04 12:47:31

+0

顺便说一句,只要你处理这些请求并在index.php的实际内容开始和退出之前输出,你就可以对index.php进行ajax调用。这样你就不会有页面内的页面。但是所有的代码都会在同一页面上难以调试 – Broncha 2012-04-05 02:59:28

0

是的,这是有道理的。你的问题基本上是:当你得到一个AJAX操作的结果并将其插入到你的页面时,它会再次插入整个布局,而不是模板。

确定,因此该解决方案是使PHP脚本调用,即“无样式”,即没有模板数据。因此,您的PHP脚本应该只输出一个简短的HTML片段而不是一个页面(您可能会为此页面删除一个“页眉”和“页脚”)。你需要采取什么行动取决于你在服务器端使用什么 - 框架? CMS?定制PHP应用程序?

+0

这是我家做的CMS,而且我在OOP方面一般都很新(到目前为止只有3个月),所以我仍然不明白我在做什么) 它实际上是CMS /订单商店的后端,我正在处理一些文章(试图).... – Balkyto 2012-04-04 12:49:57

+0

Coolio。那么......如果它是你自己的代码,你就会知道如何停止布局/页眉/页脚html出现':)' – halfer 2012-04-04 12:56:37

0

我做了一个内部应用程序的确切的事情前一段时间....事情是我是在后台传递的类名,函数名以及通过AJAX变量的函数参数和读取相同的PHP和然后使用这些参数调用类中的适当函数。

的PHP代码:

$option = trim($_GET['v']); 

switch ($option) { 
    case 1: 
     $sid = trim($_GET['q']); 
     $page = trim($_GET['p']); 
     $method = trim($_GET['m']); 

     $class = new $page($link); 
     echo $class->$method($sid); 
    break; 
    case 2: 
     $page = trim($_GET['p']); 
     $method = trim($_GET['m']); 

     $class = new $page($link); 
     echo $class->$method(); 
    break; 
    default: 
     echo ''; 
    break; 
} 

但是,这是一个内部应用程序,所以没有注入攻击,XSS,XSRF,会话劫持问题....事情可能会有所不同你

希望这有助于。

0

我认为你正在寻找一个总体战略来处理Ajax请求其高达你

例如Server Side Ajax

,除非你使用特定的框架(CI,警予等)