【问题标题】:Ajax function not called未调用 Ajax 函数
【发布时间】:2014-11-29 04:44:03
【问题描述】:

大家好,我遇到了 ajax 函数调用的问题。我尝试访问“delete.php”页面,但它从未被调用。这是我的脚本代码:

 <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
        <script>
            function deleteSpark(sparkID) {

                    var answer = confirm(sparkID);
                    //Send the user to the correct page when he presses 'yes / oke'
                    if(answer==0){
                        var ajax= $.ajax({ type: "post",
                            data: {sparkid: sparkID },
                            url: 'delete.php'
                        });
                        ajax.done(function(){
                            window.location.href = "/sparks.html";
                        });

                        ajax.fail(function(){
                            window.location.href = "/index.html";
                        })
                    }
                    /* OR*/



                    /* this method after all other code in handler*/
                // window.location.href = "/delete.php?sparkid=" + sparkID;
                // window.location.href = "/sparks.html";
                //Returns false so no events will be executed.
                return false;

            }

然后我用一个按钮调用它:删除 8

在我的 php 文件“delete.php”中,我这样做:$sparkID = $_POST['sparkid'];

但它永远不会被调用,因为我尝试回应并做一些其他不起作用的事情。有人可以帮帮我吗?

【问题讨论】:

  • confirm 方法返回布尔值。做if(answer==false) 然后执行。

标签: javascript php jquery ajax


【解决方案1】:

我还没有足够的声望来发表评论。您可以检查元素(Firefox/Chrome),然后在 AJAX 运行时查看“网络”选项卡吗?这应该显示正在发送的数据、正在发送到哪个页面等...并且应该可以帮助您调试。

您可能还想先尝试使用绝对 URL,以确保它到达正确的页面。

谢谢,

安德鲁

【讨论】:

    【解决方案2】:

    我假设,如果返回 false 不是为了阻止事件,那么当确认不是“是”时,您希望返回 false。所以我在else 语句中移动了return false。

    现在正如@Sergey Yarotskiy 指出的那样,您的if 声明是真正的问题,因为您正在等待0;您可以像这样组合(如果您在其他地方需要可变答案):if(answer = confirm(sparkID)){,或者如果不需要像这样:if(confirm(sparkID)){

    希望这会对你有所帮助。

    这应该可以解决它:

    <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
            <script>
                function deleteSpark(sparkID) {
                        //Send the user to the correct page when he presses 'yes / oke'
                        if(answer = confirm(sparkID)){
                            var ajax= $.ajax({ type: "post",
                                data: {sparkid: sparkID },
                                url: 'delete.php'
                            });
                            ajax.done(function(){
                                window.location.href = "/sparks.html";
                            });
    
                            ajax.fail(function(){
                                window.location.href = "/index.html";
                            })
                        }else{
                         return false;
                        }
    
                }
    

    【讨论】:

    • 抱歉,因为答案完全不正确,所以投了反对票。返回 false 只是阻止默认操作。它不会阻止 AJAX 事件侦听器侦听响应。当收到响应(或错误)时,无论如何都会调用回调。所以问题是根本没有调用ajax,但没有在return语句中调用。
    • @SergeyYarotskiy return false 防止默认是的,这是真的,但功能没有“默认”事件。由于有一个确认,我假设如果确认未被接受,OP 希望返回 false,因为如果它被接受,页面将会改变。另外,您注意到if 声明中的机会了吗?
    • 我们不知道deleteSpark函数是怎么调用的。只有当整个函数用作事件回调,如 $("button").click(deleteSpark);并且不会,如果它像 $("button").click(function() { deleteSpark(); );但它仍然与现有错误的性质无关。
    • 我的回答仍然纠正了if 声明。如果使用了$("button").click(function() { deleteSpark(); );,那么返回 false 应该在 click 函数中,如下所示:$("button").click(function() { deleteSpark(); return false;} ); 我认为我的回答没有任何问题。
    • 抱歉,代码是正确的,但第一感觉是“这是因为 Ajax 是异步的”。即使 ajax 是异步的,并且您的代码是正确的,问题也不是“因为”ajax 是异步的。而且我们不希望人们只是复制正确的代码。我们希望他们了解其代码的行为。
    【解决方案3】:

    'confirm' 将返回 true 或 false 而不是 0,因此将条件更改为

    if (answer) {
        // do staff
    }
    

    【讨论】:

    • 刚刚在浏览器中打开了他的网址(只是 //),它返回给我“找不到文件”并重定向到 file://// ...。它可以是浏览器或服务器特定的吗?我在ubuntu上使用firefox。如果您想要防弹代码,为什么不完全避免这些问题?
    • 如果您直接导航到该 URL,该 URL 将不起作用,但在 HTML 中用于图像、CSS 或 JS 时,它将自动保留协议(HTTP 或 HTTPS)。这是推荐的,因为浏览器不喜欢交叉加载部分(HTML over HTTP 包括 JS over HTTPS 或其他方式)。
    猜你喜欢
    • 1970-01-01
    • 2013-08-04
    • 2023-03-08
    • 2013-02-14
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 2012-07-22
    相关资源
    最近更新 更多