将文本区域中的字符串替换为 ajax 响应的值
Replace string in text area with the value of ajax response
我有一个 ajax 函数,它 return 是来自文本区域的 url 的短url。
当我想使用替换将文本区域中的短 url 替换为实际的 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;
}
});
}
调用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
如您所见,函数 return 是一个 url 缩写词,但初始文本仍然相同。我的预期结果是:test utl function http://bit.l****
测试成功,但这不起作用。
使用文本区域时,您可以简单地替换它们的文本。
$("#Pushtype_message").text(MsgStr);
您需要将新值分配给 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
在您的 for
循环之外定义并在其中使用 urllist[i]=txtStr;
但它的值从未分配,它总是 = 0:
i=0;
for (var n = 0; n < Arr.length; n++) {
txtStr = Arr[n];
var urltest=urlRegex.test(txtStr);
if(urltest)
{
urllist[i]=txtStr;
}
}
我找到了我的问题的解决方案,
我将 urllist[j] 影响到一个新的变量文本,因为在清单函数 urllist[j] return 中有一个未定义的值。
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);
});
}
});
我有一个 ajax 函数,它 return 是来自文本区域的 url 的短url。 当我想使用替换将文本区域中的短 url 替换为实际的 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;
}
});
}
调用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
如您所见,函数 return 是一个 url 缩写词,但初始文本仍然相同。我的预期结果是:test utl function http://bit.l****
测试成功,但这不起作用。
使用文本区域时,您可以简单地替换它们的文本。
$("#Pushtype_message").text(MsgStr);
您需要将新值分配给 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
在您的 for
循环之外定义并在其中使用 urllist[i]=txtStr;
但它的值从未分配,它总是 = 0:
i=0;
for (var n = 0; n < Arr.length; n++) {
txtStr = Arr[n];
var urltest=urlRegex.test(txtStr);
if(urltest)
{
urllist[i]=txtStr;
}
}
我找到了我的问题的解决方案, 我将 urllist[j] 影响到一个新的变量文本,因为在清单函数 urllist[j] return 中有一个未定义的值。
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);
});
}
});