0

我有这种形式的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 调用时,该函数应在函数中获取 POST-Data insertCode。当需要或包含该函数时,会使用不同的$param.

问题是,当我发送我的 AJAX 请求时,该函数执行了两次。首先在评估 POST-Code 之前。因此,所有回显的文本都被两次发送回 AJAX-Success-Function。

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

如何防止 AJAX 调用帮助自己调用该函数?

4

2 回答 2

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
}

不过,请记住,标题总是可以伪造的!

于 2013-07-20T09:00:11.640 回答
0

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

其次,PHP 脚本中有一个 bool 变量,在 AJAX 调用请求时未设置该变量。

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

于 2013-07-21T03:21:16.383 回答