Soalan: Mengapa ia tidak dilaksanakan location.href = "../exit.html";
, 而是执行了 window.location.href = 'http://www.baidu.com';
?
Adakah terdapat cara untuk melaksanakan kaedah getData()
, 如果获取数据失败,则跳转到 ../exit.html
, 不再执行 gourl();
?
Tambahan: ajax里面的 async: false 是同步请求!!!
, ini hanyalah demo ringkas Sebenarnya, mungkin terdapat banyak logik di sebalik kaedah getData(), tetapi jika getData() gagal mendapatkan data, program tidak akan dibenarkan untuk melaksanakan kaedah lain, dan kaedah lain mungkin tidak ada di dalam fail yang sama.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
</head>
<body>
<p>
<h2>我是测试页面,看我是否发生跳转</h2></p>
<script src="https://cdn.bootcss.com/jquery/1.9.0/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
getData();
gourl();
});
function getData() {
var is_success = false;
$.ajax({
type: "GET",
url: "http://baike.baidu.com/api/openapi/BaikeLemmaCardApi?scope=103&format=json&appid=379020&bk_key=bug&bk_length=600",
data: "",
dataType: "json",
async: false,
success: function(data) {
if (data.status == 200) {
is_success = true;
} else {
is_success = false;
}
}
});
if (!is_success) {
location.href = "../exit.html";
}
}
function gourl() {
console.log('我被执行了');
window.location.href = 'http://www.baidu.com';
}
</script>
</body>
</html>
Kemudian anda boleh menghubungi semula gourl selepas kejayaan kaedah getData untuk melaksanakan pemprosesan logik yang anda mahukan
Selain itu, saya tidak tahu bagaimana untuk menilai is_kejayaan anda secara khusus kerana terdapat $ajax dan ralat yang sepadan
Kod anda bersamaan dengan melaksanakan dua ayat berikut:
Apabila kedua-dua ayat ini dilaksanakan secara berterusan, mereka akan melompat ke alamat berikut
Tekaan saya ialah pelayar mengambil masa untuk mengakses yang pertama, tetapi sebelum ia berjaya, lompatan kedua datang lagi, jadi saya melepaskan lompatan pertama dan melaksanakan lompatan kedua, sama seperti memasukkan alamat dua kali dengan cepat dalam URL yang sama.
Fungsi
gourl() tidak boleh dipanggil di hadapan, tetapi harus diletakkan di tengah logik Ajax, dan tambah
else{gourl();}
selepas logik if:
Kod penyoal boleh difahami seperti berikut:
Apabila terdapat dua lokasi.hrefs berturut-turut dalam kod, lompatan seterusnya akan dilaksanakan Subjek soalan ini boleh mencubanya sendiri.
Selain itu, memandangkan ajax adalah tak segerak, subjek perlu menulis
if(!is_success)
写到ajax中的error中去,或者写到success中的else判断中,否则无论ajax是否成功,都会跳转。gourl()
ke dalam kejayaan juga.Selain itu, ralat merentas domain harus berlaku jika ajax digunakan secara langsung seperti ini. Adalah disyorkan untuk menggunakan proksi atau kaedah lain untuk menyelesaikan masalah merentas domain.
Kod telefon mudah alih, adakah ini maksud anda?
Terutamanya menggunakan janji jQ, semua ditulis secara tak segerak, semua panggilan balik ajax yang berjaya diletakkan dalam selesai Ditunda (jika terdapat berbilang, ia juga boleh ditulis sebagai tatasusunan), dan kemudian hanya berikan status secara langsung dalam selesai ajax.
Oleh kerana
getData
和gourl
有执行的关系,要么把gourl
diletakkan dalam pertimbangan panggil balik, ini boleh sesuai untuk kegunaan tak segerak.Jika penyegerakan dengan subjek, maka tidak mengapa
Bolehkah saya mengawal Gourl terus di sini untuk melaksanakannya?
Mungkin terdapat sesuatu yang tidak kena dengan logik kod anda. Ajax tidak segerak. gourl(); Fungsi ini tidak boleh dipanggil di tempat itu. Ia boleh dipanggil dalam panggilan balik kejayaan atau kegagalan permintaan ajax.
Melihat permintaan anda, ia harus dipanggil dalam kejayaan.