Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery.click()函数中的远程Ajax调用不';在进入下一页之前,我不能完成_Javascript_Jquery_Json_Ajax_Jquery Events - Fatal编程技术网

Javascript jQuery.click()函数中的远程Ajax调用不';在进入下一页之前,我不能完成

Javascript jQuery.click()函数中的远程Ajax调用不';在进入下一页之前,我不能完成,javascript,jquery,json,ajax,jquery-events,Javascript,Jquery,Json,Ajax,Jquery Events,我需要使用ajax(JSON)将我网站上的点击信息发送到第三方服务器。我正在使用jQuery,并将单击事件添加到某些链接中。在click事件中,我向远程服务器发出一个JSON请求,请求中包含click的位置(热图)和一些其他信息 问题是ajax函数没有在默认链接操作发生之前及时启动。将async设置为false似乎对远程ajax调用不起作用。我已经尝试了preventDefault(),但是我不知道在成功的ajax调用之后如何运行默认操作。以下是我想做的: $('a').click(submit

我需要使用ajax(JSON)将我网站上的点击信息发送到第三方服务器。我正在使用jQuery,并将单击事件添加到某些链接中。在click事件中,我向远程服务器发出一个JSON请求,请求中包含click的位置(热图)和一些其他信息

问题是ajax函数没有在默认链接操作发生之前及时启动。将
async
设置为false似乎对远程ajax调用不起作用。我已经尝试了
preventDefault()
,但是我不知道在成功的ajax调用之后如何运行默认操作。以下是我想做的:

$('a').click(submit_click);
    
function submit_click(e,fireAjax){
    e.preventDefault();
    cd_$.ajax({
        url: jsonUrl, //remote server
        dataType: 'json',
        data: jsonData,
        async: false,
        success: function(reply){
            //Run the default action here if I have to disable the default action
        },
    });
}

有什么建议吗?

换句话说,你试图同时做两件事:

<a ID="SOMETAG" href="...">link</a>
你想保留
SOMETAG
的HREF,以防他们关闭javascript

我认为解决方案是,当您连接到onclick处理程序时,您应该通过javascript删除href,然后让onSuccess以编程方式调用href

因为我看不出在哪里可以让浏览器生成一个新的进程来完成AJAX调用,这反而会破坏模型。如果我离开某个页面(或关闭选项卡),我不希望浏览器代表我继续与服务器对话…

是的,你必须这样做

  • 捕获链接的href值
  • 在submit_click函数中返回false
  • 将成功函数中的页面url更改为存储的href值

    $('a')。单击(提交)


我可能不会完全从DOM中删除href,只要点击一下“return false”@Matthew J Morrison~我看不出删除href和返回false有什么区别,是同一个硬币的两面,不是吗?不过,只有在这种情况下才会这样。删除href使其不再是有效的a元素,那么为什么不像在任何其他情况下调用a元素上的代码而实际上不想跟随链接一样返回false呢?我在这里是本着最佳实践的精神说的……如果您删除了href,但需要该url才能在ajax完成时将页面重定向到,您会希望没有删除它。@Matthew J Morrison~但如果您a)将其存储在元素的数据中,或者b)使用已经知道指向该页面的特定onClick@Dan Heberden~就像人们不会经常滥用dom元素一样我只是说明了我将如何做到这一点,但我会再次假设,没有javascript,任何不需要的功能都不会成为关键任务,因此我认为,从一开始就依赖这种行为是一种不合理的策略。不是我的设计,不是我的项目,不是我的代码。我只回答了我是如何解决这个问题的。该死,所以如果我想在提交按钮上做同样的事情,我必须检测被点击的东西的类型,并调用相应的操作(提交表单,或转到链接)?在提交按钮上,最好使用实际表单的提交处理程序<代码>$(“#myForm”).submit(function(){并完成您的工作谢谢Dan!这似乎工作得很好。我仍然希望有一种方法可以获取事件对象并触发默认事件…(例如,e.e.fireOriginalEvent(),但您的方法会工作得很好。我想+1这个,但我今天已经超过了我的最大投票数…我就是这样做的!(我稍后会回来并+1)@Clint-但是你会重新启动整个过程:)如果你绑定到事件并启动它,你将继续发送ajax,刷新,发送,刷新。。。
function onClick() {
    // Attached to "#SOMETAG" and does an AJAX call ...
}
function submit_click(e,fireAjax){
    e.preventDefault();
    var oldHref = $(this).attr('href'); // store the old url
    cd_$.ajax({
        url: jsonUrl, //remote server
        dataType: 'json',
        data: jsonData,
        async: false,
        success: function(reply){
            //Run the default action here if I have to disable the default action
            window.location.href = oldHref; // go to the new url
        },
    });
    return false; // don't actually go to the href
}