0

我有一个下面的锚,如下所示

<a onclick="return getFile('/log/sample.log');" href="/log/sample.log" target="_blank"> sample.log </a>

因为在我的服务器上,href中的日志目录可能不正确。所以函数“getFile”会在询问服务器后将href更改为正确的。

由于链接不正确,第一次点击总是失败,然后在 getFile 中的 AJAX 过程完成并给出正确的 href 后,以后的点击就可以了。

问题是我如何强制让 html 在第一次单击时等待直到更改 href,然后在服务器上进行查询。

提前致谢。

我想我目前的方式可能不是通过使用“onclick”来实现这个想法的正确方向。

4

3 回答 3

0

我建议最初将 href 设置为 # 。在您的 getFile 中,将 href 设置为正确的值,然后以编程方式单击 ajax 成功时的“a”

您将需要找到执行此操作的元素。它可以通过设置一个 id 然后使用 document.getElementById() 来完成,或者使用 Jquery 选择器更容易做到这一点,它甚至有一个可以在之后调用的 .click()。

于 2012-07-20T05:18:19.887 回答
0

如果你想坚持这个流程使你的 ajax 调用同步,它将强制等待。

但是不建议使用此流程,我宁愿在页面加载时更新这些 href,或者将默认 url 设置为我的服务器页面,然后重定向到正确的日志文件

于 2012-07-20T05:21:41.667 回答
0

你想要这样的东西

$(function() {

//assume you tagged all anchors you want to do this for with class=adjustlink
$('a.adjustlink').click(function(e) {
  var thisAnchor = $(this); //save reference for later use

  //this will either be true (see below) or undefined (falsy)
  if(thisAnchor.data('myapp.linkHasBeenTested')) {
    return;  //continue on
  } 

   // Stop the link from being navigated (the default for this event)
   e.preventDefault();

  //I'm assuming this is fetched as text but could just as well be JSON or anything else
  $.get('/LinkAdjustment/', thisAnchor.attr('href')).done(function(result) {
    thisAnchor.attr('href', result); //set the href
    thisAnchor.data('myapp.linkHasBeenTested', true);
    thisAnchor.trigger('click');
  });
});

});

作为一个有趣的旁注。您可能正试图做一些类似于 REST打算做的事情。您可能会考虑,首先获取一个资源,该资源会预先告诉您正确的链接是什么。

于 2012-07-20T05:23:37.640 回答