2016-12-30 55 views
3

我有一个ajax函数,它可以从textarea返回一个url的shorturl。 当我想通过使用替换文本区域中的实际url来替换shorturl时,代码不起作用。这是我实现用文本区域中的字符串替换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; 
    } 
    }); 
} 

和调用checkurl功能被实现为遵循

$("#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); 
    }); 
    } 
}); 

在我的文字区域,我把这个文本的功能:

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]到一个新的变量文本,be导致清单功能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

使用textarea时,您可以简单地替换它们的文本。

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

不起作用,相同的结果 –

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); 
     }); 

} 

ifor循环外部定义和里面urllist[i]=txtStr;使用,但它的价值从未分配,这是alaways = 0:

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( '试验', '');测试==='我的测试字符串'// true' –

+0

textarea包含一些URL,并且foreach url我应该用新的urlshortner替换它。我认为主要的问题是我们如何替换textarea中的url –