防止AJAX调用的PHP脚本执行一个函数

时间:2013-07-20 08:55:13

标签: php javascript jquery ajax

我有一个这样形式的ajax调用:

$("#assignDesigner .save").click(function(event) {
    event.preventDefault();
    $.post("/cms/cms/php/update_di_user_designer_meta.php", $("#assignDesigner").serialize(), function(response) {
        alert("Update " + (response ? "worked" : "failed"));

        var data = {
            promoted_header: $(".product-promotion .rightcol > h3").html(),
            promoted_content: $(".product-promotion .rightcol > span").html(),
            promoted_owner: $("#designerSelection").val()
        };

        $.post("/cms/cms/php/create_di_promoted_products.php", data, function(response_inner) {
            $("section.product-promotion").replaceWith(response_inner);
        })
    })
});

我的PHP脚本如下所示:

<?php
function insertCode($param)
{
    ...many echos...
}

if (isset($_POST))
{
    insertCode($_POST['param'])
}
?>

当通过AJAX调用时,该函数应该使用insertCode函数中的POST数据。在需要或包含时,使用不同的$param调用函数。

问题是,当我发送我的AJAX-Request时,该函数执行两次。首先评估POST代码。因此,所有回显的文本都会两次发送回AJAX-Success-Function。

然后我测试了回显的文本是否被发回ich我用测试评论了下半部分,是的,即使这样,函数的代码也会被回显,尽管我从未调用过该函数。

如何阻止AJAX调用来帮助自己调用函数?

2 个答案:

答案 0 :(得分:0)

您可以简单地在PHP文件中检查请求PHP文件的人员或内容!

// If the request came from AJAX then do this
if ($_SERVER["HTTP_X_REQUESTED_WITH"] == "XMLHttpRequest") {
   // Perform Ajax related stuff
}
else {
   // Perform non-Ajax related stuff
}

但是,请记住,标题总是可以伪造!

答案 1 :(得分:0)

我现在已经解决了这个问题,但有两个问题。 首先在我的click-event-handler中,我使用response替换特定标记的内容。但只要PHP脚本中出现错误,就不会在脚本中再次创建标记,导致输出堆叠在页面上。

其次,PHP脚本中有一个bool变量,在AJAX-Call请求时没有设置。

尽管如此,谢谢你的回答。他们帮助解决了很多问题。