我有一个这样形式的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调用来帮助自己调用函数?
答案 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请求时没有设置。
尽管如此,谢谢你的回答。他们帮助解决了很多问题。