2013-07-20 70 views
0

我有这种形式的Ajax调用:防止AJAX所谓的PHP脚本执行功能

$("#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-Data。当需要或包含时,函数调用不同的$param

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

然后我测试了回显文本是否被发回ich我评论下半部分的测试和是的即使然后该函数的代码被回显,虽然我从来没有调用函数。

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

+0

使用'e.preventDefault();' –

+0

这个问题听起来像是您的JavaScript点击处理程序中的逻辑错误。添加触发'$ .post'的单击处理程序代码,我打赌会发现问题。 – Justin

+0

我在我的点击事件处理程序中调用了'e.preventDefault()'。关于事件处理程序本身,我只是添加了它。如果有帮助,我会很高兴。 – satanik

回答

0

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

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

但是,谢谢你的回答。他们帮助解决了很多问题。

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 
} 

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