0

私は以下のように下のアンカーを持っています

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

私のサーバーでは、href のログ ディレクトリが正しくない可能性があるためです。したがって、関数「getFile」は、サーバーに問い合わせた後、href を正しいものに変更します。

リンクが正しくないため、最初のクリックは常に失敗し、getFile の AJAX プロセスが終了して正しい href が指定された後、その後のクリックは問題ありませんでした。

問題は、最初のクリックでhrefが変更されるまでhtmlを強制的に待機させ、サーバーでクエリを実行する方法です。

前もって感謝します。

「onclick」を使用してアイデアを実装することで、現在の方法が正しい方向に進んでいない可能性があると思います。

4

3 に答える 3

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 に答える
0

最初に href を # に設定することをお勧めします。getFile で、href を正しい値に設定し、プログラムで ajax の成功時に「a」をクリックします。

これを行うには、要素を見つける必要があります。ID を設定してから document.getElementById() を使用するか、Jquery セレクターを使用してこれを行う方が簡単で、後で呼び出すことができる .click() もあります。

于 2012-07-20T05:18:19.887 に答える