2016-12-30 5 views
3

텍스트 영역에서 url의 shorturl을 반환하는 ajax 함수가 있습니다. 대체 텍스트를 사용하여 텍스트 영역의 실제 URL로 바꾸려면 코드가 작동하지 않습니다.텍스트 영역의 문자열을 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

텍스트 영역을 사용하여 작업 할 때 텍스트 만 바꾸면됩니다.

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

이 작동하지 않습니다. 동일한 결과 –

1

당신은 당신의 for 루프 외부에서 정의하고 urllist[i]=txtStr; 내에서 사용하지만 값이 할당되지 않습니다 된 할당을 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에 새 값을 필요는 = 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 ('test', ''); 테스트 === '내 테스트 문자열'// true' –

+0

텍스트 영역에 일부 url이 있고 foreach url은 새 urlshortner로 바꿔야합니다. 주요 문제는 텍스트 영역의 URL을 대체하는 것입니다. –