0

リンク共有プレビューのような Facebook を構築しようとしています。視覚的に傾いている人には、次のようなものがあります。

ここに画像の説明を入力

すべてが正常に機能していますが、いくつかの小さな問題があります。リンク共有のプレビューは、対応する textarea の keyup 関数でトリガーされます。このようなもの:

$('#txtPublish').keyup(function(e){
                if ($(this).val() != '' && $(this).parent().find('.share-with').hasClass('active')) {   

                     detectHyperlink(e,this);
                  }
                  else {
            //do whatever
                  }
            });

対応する detectHyperlink は次のように始まります。

function detectHyperlink(e,textarea)
{
    if((e.which == 13 || e.which == 32 || e.which == 17) && ($(textarea).val().trim() != "")){
        var hyperlink_post = $('#txtPublish').val(); // make dynamic
        if(hyperlink_post != null) {
            hyperlink_post = " " + hyperlink_post;
            var urlRegex = /(https?\:\/\/|\s)[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})(\/+[a-z0-9_.\:\;-]*)*(\?[\&\%\|\+a-z0-9_=,\.\:\;-]*)?([\&\%\|\+&a-z0-9_=,\:\;\.-]*)([\!\#\/\&\%\|\+a-z0-9_=,\:\;\.-]*)}*/i;
            if(urlRegex.test(hyperlink_post)){
                        // SImple DOM Manipulation


            $.ajax({
                type: "post",
                url: '/controller/crawlHyperlink',
                data: {message: hyperlink_post},
                cache: false,
                success: function(data) {   

// これらのことに興味がある人のために、もちろんデータは JSON 形式です。

これは問題なく動作しますが、問題は次のとおりです。detectHyperlink メソッドが何度も呼び出され続けます。つまり、Textarea がハイパーリンクを検出して情報を共有した後も、ループし続け、サーバーに対して ajax 呼び出しを行います。そのため、[投稿] ボタンを押すと、実際にこの情報を投稿する前に、ハイパーリンクを検出するためにサーバーに対して数回の呼び出しが行われます。

理由がわかりますか?

ありがとう

4

1 に答える 1

0

jQuery でオーバーライドする場合は、既定のハイパーリンク アクションを抑制したい場合があります。

$('#txtPublish').keyup(function(e){
  if ($(this).val() != '' && $(this).parent().find('.share-with').hasClass('active')) {   
    detectHyperlink(e,this);
    e.preventDefault();//prevents default submit() from firing
    }

さらに、ajax が呼び出されたときに一時的なフラグを設定し、フラグが設定されている場合は再び実行されないようにすることができます。

if (ajaxWasCalled==false) {
  $.ajax({
    ...
    ajaxWasCalled=true;
    });
  }
于 2013-02-15T19:09:08.100 に答える