2016-12-30 6 views
3

私は、テキスト領域からURLの短縮を返すajax関数を持っています。 置換を使用してショートカットをテキスト領域の実際のURLに置き換える場合、コードは機能しません。これは私の実装テキスト領域の文字列をajax応答の値に置き換えます。

のAjax機能である:

function checkUrl(text) { 
    var bit_url = ""; 
    var url = text; 
    var username = "o_1i42ajamkg"; // bit.ly username 
    var key = "R_359b9c5990a7488ba5e2b0ed541db820"; 
    return $.ajax({ 
    url: "http://api.bit.ly/v3/shorten", 
    data: { 
     longUrl: url, 
     apiKey: key, 
     login: username 
    }, 
    dataType: "jsonp", 
    async: false, 

    success: function(v) { 
     bit_url = v.data.url; 
    } 
    }); 
} 

と私のテキスト領域で

$("#urlr").change(function() { 
    var text = $("#Pushtype_message").val(); 
    var c = ""; 
    var msgtext = ""; 
    var urlRegex = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; 

    var MsgStr = $("#Pushtype_message").val(); 
    var Arr = text.split(" "); 
    urllist = new Array(); 
    urluri = new Array(); 
    i = 0; 
    for (var n = 0; n < Arr.length; n++) { 
    txtStr = Arr[n]; 
    var urltest = urlRegex.test(txtStr); 
    if (urltest) { 
     urllist[i] = txtStr; 
    } 
    } 

    for (var i = 0; i < urllist.length; i++) { 
    // console.log(urllist[i].toString()); 
    checkUrl(urllist[i]).done(function(result) { 
     var response = (result.data.url); 

     console.log(response); 
     MsgStr.replace(urllist[i], response); 
     console.log(MsgStr); 
     $("#Pushtype_message").val(MsgStr); 
    }); 
    } 
}); 

に従うようcheckurl関数を呼び出す機能が実装されている私は、このテキストを置く:

test utl function https://www.google.Fr test success 

私のコンソールには次の結果が表示されます

main.js http://bit.**** 
main.js test utl function https://www.google.Fr test success 

ご覧のとおり、この関数はurlshortnerを返しますが、最初のテキストは同じです。私の期待される結果は:test utl function http://bit.l****テスト成功ですが、これは動作しません。

+1

API資格情報を公開しないでください:) –

+1

あまりにも遅れて、私はメインフレームをハッキングしています。 –

答えて

0

私の問題についての解決策を見つけました。 私は、urllist [j]に新しい可変テキストに影響します。チェックリスト関数urllist [j]に未定義の値を返します。

var j=0; 
     for(j; j<urllist.length; j++){ 
    var text=urllist[j]; 
     checkUrl(urllist[j]).done(function(result){ 
      var response=result.data.url; 

      console.log(urllist[j]); 

      MsgStr1 = MsgStr.replace(text,response); 

      console.log(MsgStr1); 
      $("#Pushtype_message").val(MsgStr1); 
     }); 

    } 

}); 
1

テキストエリアで作業する場合は、テキストを置き換えるだけで済みます。

あなたは MsgStr

for(var i=0; i<urllist.length; i++){ 
     // console.log(urllist[i].toString()); 
     checkUrl(urllist[i]).done(function(result){ 
      var response=(result.data.url); 

      console.log(response); 
      MsgStr = MsgStr.replace(urllist[i],response); 
      console.log(MsgStr); 
      $("#Pushtype_message").val(MsgStr); 
     }); 

} 

iに新しい値を割り当てる必要

$("#Pushtype_message").text(MsgStr); 
+0

は機能しません。同じ結果 –

1

があなたのforループの外で定義し、それurllist[i]=txtStr;内部で使用されるが、その値が割り当てられることはありません、それは0 = alawaysですされています

i=0; 
for (var n = 0; n < Arr.length; n++) { 
    txtStr = Arr[n]; 
    var urltest=urlRegex.test(txtStr); 
    if(urltest) 
    { 
     urllist[i]=txtStr; 
    } 
} 
+0

.replaceはすでにその置換文字列を返します。 –

+0

@AndrewIceでも値は割り当てられません: 'var test = 'My Test string'; test.replace( 'test'、 '');テスト=== '私のテスト文字列' // true' –

+0

テキストエリアにはいくつかのURLが含まれており、foreach URLは新しいurlshortnerに置き換えてください。主な問題は、テキストエリアのURLをどのように置き換えるかということです –

関連する問題