在成功调用ajax之后链接href

我有一个正常的链接:

Continue 

我已将点击绑定到事件以发布这样的ajax请求:

 $('.continue').click(function () { $.ajax({ type: 'POST', url: '/url-to-post-to', data: mydata, contentType: 'application/json', error: function (err) { alert("error - " + err); }, success: function () { return true; } }); }); 

我想要实现的是成功所遵循的联系….
即,如果没有错误,应将用户重定向到谷歌。

我知道我可以将window.location.href放在成功处理程序中,但我试图尽可能避免这种情况

不幸的是(在你的情况下),ajax是异步的,这意味着你的click函数启动ajax调用,然后继续运行而不注意它的作用(因此最后不返回任何内容)。

成功函数稍后调用(当ajax成功返回时)并且是一个完全不同的函数,因此它返回true与原始单击函数无关。

所有这些,你需要使用javascript来覆盖锚标签的自然行为(直接转到google.com)以及之后发生的事情(重定向)。

 $('.continue').click(function (e) { e.preventDefault(); // otherwise, it won't wait for the ajax response $link = $(this); // because '$(this)' will be out of scope in your callback $.ajax({ type: 'POST', url: '/url-to-post-to', data: mydata, contentType: 'application/json', error: function (err) { alert("error - " + err); }, success: function () { window.location.href = $link.attr('href'); } }); }); 

你可以试试这个,

  $('.continue').click(function () { $.ajax({ type: 'POST', url: '/url-to-post-to', data: mydata, contentType: 'application/json', error: function (err) { alert("error - " + err); }, success: function () { $(location).attr('href',$(this).attr('href')); } }); return false; }); 

你尝试过这样的事情:

 $('.continue').click(function(e) { e.preventDefault(); var link = $(this).attr('href'); $.ajax({ type: 'POST', url: '/url-to-post-to', data: mydata, contentType: 'application/json', error: function (err) { alert("error - " + err); }, success: function () { window.location.href = link; // <-- This line } }); }); 

或者,如果链接与响应文本一起发送,请使用该数据。

编辑:我没看到你的最后一行,不想使用它的原因是什么? 它非常动态,并且支持所有支持JavaScript的浏览器。

如果我们需要在这里实际“点击”,我们应该只是新触发click事件并允许它在第二次点击时返回true。

 $('.continue').click(function () { if ($(this).attr('tracked')!=undefined) { return true; } a = $(this); $.ajax({ type: 'POST', url: '/url-to-post-to', data: mydata, contentType: 'application/json', error: function (err) { alert("error - " + err); }, success: function () { $(this).attr('tracked',true); $(a)[0].click(); } }); });