2012-01-24 25 views
2

uは非常に基本的なダウンロードカウンタを実装したかっただけです。 リンクをクリックすると、ajaxリクエストがサーバーに送信され、その後にダウンロードが開始されます。jquery ajax呼び出し結果がエラーになり、xhr.status == 0

<a href="<?= $update->link ?>" onClick="downloadCount(<?= $update->id ?>);"><?php echo img(array("height" => "24", "src" => "images/btn_free.png")); ?></a> 

これはリンクを生成する方法です。 (私は、URLのすべてがOKでコピーした場合)

function downloadCount(id_) { 
    $.ajax({ 
     url: '<?= base_url() ?>index.php/updates/incCount/' + id_.toString(), 
     success: function() { return true }, 
     error:function (xhr, ajaxOptions, thrownError){ 
          alert(xhr.status); 
          alert(thrownError); 
         } 
    }); 

URLが正しい が、リンクをクリックしたときに私はちょうど(0と1番目と2番目が空である)2つのアラートを得た

私は中return false;を追加するときリンクが実行されず、ajax呼び出しが成功したonClick部分 私の関数にreturn false;を追加すると、毎回リンクが実行され(WHY ??)、ajax呼び出しがエラーで返されます。 、...私はちょっとこれは通常は非常に簡単な作業> _ <

+0

ドメインは同じであり、プロトコルは同じであり、ポートは同じですか? 'base_url()'は末尾にスラッシュを付けますか? – lonesomeday

答えて

3

リンクをクリックすると、別のページに移動するには、ブラウザの原因となるため混乱している

ドメインが同じであるので、これは理由ではありませんこれは未処理のAjaxリクエストを中止します。そのため、エラーが発生します。

あなたはページがリロードすべきか否かを判断するために、あなたのdownloadCount機能をご希望の場合は、あなたのハンドラからの戻りこの値に必要です:jQueryの方法について

onClick="return downloadCount(<?= $update->id ?>);" 
+0

私はすでに同じ考えをしましたが、なぜajax関数呼び出しの後に 'return false; 'を追加するとブラウザが別のサイトに移動していますか? – soupdiver

+0

@skelle更新を参照してください。 –

+0

ahh ok私はそれを逃しました:) – soupdiver

0

、でpreventDefault()を使用します。

http://api.jquery.com/event.preventDefault/

+0

'return false;'実際に 'e.preventDefault()'(& 'e.stopPropagation()')を実行します。 – Johan

+0

@Johan確かに ' stopPropagation'を使用すると、イベントの委任を防ぐことができます。 – lonesomeday

+0

@Johan、ここでe.stopPropagation()を行う必要はありますか? – Jashwant