2012-06-26 67 views
1

我一直在寻找近一个小时,但没有找到正确的例子来解决我的问题: 我想调用一个PHP函数(这是一个简单的与链接在页面加载时执行的JavaScript函数)。我对AJAX并不擅长,我想了解如何直接从javascript代码中调用包含在index.php文件中的PHP函数。从javascript,onload调用php函数(AJAX?)

下面是我在我的javascript代码段:

var xmlhttp; 

if (window.XMLHttpRequest) 
{// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
} 
else 
{// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xmlhttp.open("GET","/dev/templates/absolu/index.php?s=" + Math.random(),true); 
//@unlink(listeImages[i].toString()); 
+2

所有答案似乎集中在'GET'上,但我建议切换到'POST'以进行删除操作。 – jeroen

+0

'POST'不会为这种情况带来更多的麻烦.. – skafandri

+0

基本上,一旦PHP完成页面的构建并将其发送到浏览器,它的工作就完成了。您无法从浏览器“调用PHP函数”。你可以做的是使用AJAX让网页服务器处理新的页面请求。在此请求期间,您可以在服务器上执行一些代码,调用您的函数等,然后发回任何类型的消息。 – AlexMA

回答

5

您发送函数名(如果你将不得不在未来更多的功能),而params为获得PARAMS

var fileToDelete; 
var xmlhttp; 

    if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
    } 
    else 
    {// code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.open("GET","/dev/templates/absolu/index.php?s=" + Math.random()+"&action=delete&file="+fileToDelete,true); 

在你的PHP脚本,你应当予以受理:

<?php 
if (isset($_GET['action'])){ 
    switch($_GET['action']){ 
    case 'delete': 
     @unlink(listeImages[$_GET['action']].toString()); 
    break; 
    //Other functions you may call 
    } 
    exit; 
} 
//The rest of your index.php code 
?> 
+0

其实,我永远不会写这样的代码(我总是使用jQuery),但我只是回答了这个问题:) – skafandri

+0

嗨,非常感谢您提供的帮助。尽管如此,网站会不会变得更容易被删除文件(如http://stackoverflow.com/a/11208983/1451422中所述)?除此之外,这正是我需要的! 编辑:“POST”可以完成这项工作吗? –

+2

我给你一个**工作**解决方案,你应该把这个代码包装到一个会话控制中...... – skafandri

0

使用jQuery(http://jquery.com/),你可以拨打电话为:

$(document).ready(function() { 
    $.get("/dev/templates/absolu/index.php?", { 
    'action': 'delete', 
    'other': 'get-parameters', 
    'r': Math.random() 
    }); 
}); 

服务器端的例子:

<?php 

switch($_GET['action']) { 
    case 'delete': 
    // call unlink here 
    break; 
    case 'dosomething': 
    // else 
    break; 
    default: 
    // Invalid request 
    break; 
} 

请注意,删除文件应该负责任地处理(执行安全检查),以麦确保没有错误的文件被意外删除或故意删除。

+1

是的,我会提出这个建议......但不回答这个问题。 – Onheiron

+0

感谢您的帮助,但让我们说我想调用index.php文件中包含的特定函数,而不是所有的代码。(如果我理解你的代码片段是正确的) –

+0

@Ghillied你可以使用$ _GET参数来明确定义你想要调用的动作。我将更新答案给你一个例子 – mobius

3

你不能直接调用ajax调用的php函数,它只会调用php脚本,就像从浏览器打开页面index.php一样。

您必须在您的php脚本中添加测试以了解哪个函数必须被调用,例如。 :

如果您在AJAX调用页面/dev/templates/absolu/index.php?mode=delete_image &图像= filename.png

<?php 
if($_GET['mode'] == "delete_image") { 
    unlink($_GET['image']); 
} 
?> 

请小心,任何人都可以调用这个网页,让您必须检查将要删除的内容并验证您在GET参数中收到的内容。在这里我可以拨打/dev/templates/absolu/index.php?mode=delete_image&image=index.php删除php脚本页面。