此代码检查死链接。由于浏览器不允许第三方Ajax请求,我创建了一个php文件来检查死链接,我的原生jQuery代码是:
function UrlExists(urlx) {
$.ajax({
url: "/chk.php?url=" + encodeURIComponent(urlx),
cache: false,
method: 'get',
success: function (data) {
if (data.indexOf("T") != -1) {
return true;
}
else {
return false;
}
}
});
}
$(document).ready(function () {
$("table[id^='row']").each(function () {
if (!UrlExists($(this).find("a[href$='mp3']").attr('href'))) {
$(this).remove();
}
})
});
虽然,我确定了
1)chk.php
工作正常,并在某些网址上返回T
,而在其他网址上则不返回。{/ p>
2)没有使用旧的JS代码
问题仍然是以上程序删除了所有链接。我也尝试将async
设置为false,但它没有帮助。
答案 0 :(得分:2)
成功回调由jQuery调用,它使用返回值。代码中的UrlExists始终并且总是返回未定义的值,这被视为false。尝试下面这样的事情:
function urlExists(url, callback)
{
$.ajax({
url: "/chk.php?url="+encodeURIComponent(url),
cache: false,
method: 'get',
success: function(data){
if (data.indexOf("T") != -1){
callback(true);
} else {
callback(false);
}
}
});
}
$(document).ready(function() {
$("table[id^='row']").each(function() {
var url = $(this).find("a[href$='mp3']").attr('href');
var self = this;
urlExists(url, function (exists) {
if (! exists) {
$(self).remove();
}
});
});
});
或者您可以使用其他答案中描述的同步方法编写urlExists,但是它会在每次提取期间使javascript引擎阻塞,而且由于多个请求不能同时发生,因此速度较慢。
答案 1 :(得分:1)
问题是你在成功回调中返回,返回将不会到达外部函数,因此UrlExist()
不返回任何今天写的内容。
你要么必须在你的success-callback中进行删除,要么调用另一个删除链接的函数,但是仍然必须从你的success-callback中调用该函数。
答案 2 :(得分:0)
Ajax调用是异步的。因此,对象内的返回不能正常工作(或根本不工作)。
您需要一个回调函数
function Urlexists(urlx,callback){
[..]
if(data.indexOf("T") != -1){
callback(true);
}
[..]
}
答案 3 :(得分:0)
你之前在普通的javascript中使用相同的代码并且它是同步的。在jQuery中,它将是:
return $.ajax({
url: "/chk.php?url="+encodeURIComponent(urlx),
async: false,
cache: false,
method: 'get'
}).responseText.indexOf("T") > -1;
如果您只想将该代码换成jQuery,那就是这样。如果你还想使它异步,你必须在回调函数中进行删除。
答案 4 :(得分:0)
AJAX调用是异步的(AJAX中的第一个A),因此函数在服务器的答案到达之前返回。
在成功回调函数中删除:
function UrlExists(urlx, element) {
$.ajax({
url: "/chk.php?url="+encodeURIComponent(urlx),
cache: false,
method: 'get',
success: function(data){
if(data.indexOf("T") == -1){
element.remove();
}
}
});
}
$(document).ready(function() {
$("table[id^='row']").each(function(){
UrlExists($(this).find("a[href$='mp3']").attr('href')), $(this))
})
});