我有一个AJAX。
var id = "some_text";
$.ajax({
type : "GET",
dataType : "json",
url : "<?php echo site_url('con_atk/get_outlet'); ?>",
async : false,
success : function(outlet){
$.map(outlet, function (v) {
if(v.NamaOutlet == id){
window.location.href = "page_a.php";
}
else{
window.location.href = "page_b.php";
}
})
}
})
我想检查AJAX成功调用(JSON对象类型)中是否存在id
的值。如果存在,则重定向到页面A,如果没有重定向到页面B.当我在alert
上使用v.NamaOutlet
时,该值存在。但为什么我没有重定向到page_a.php?
修改
当我使用alert(JSON.stringify(outlet))
;
[{"KodeOutlet_iBSM":"ACG","NamaOutlet":"Accounting"},{"KodeOutlet_iBSM":"BBG","NamaOutlet":"Business Banking"},{"KodeOutlet_iBSM":"CB I","NamaOutlet":"Corporate Banking I"},{"KodeOutlet_iBSM":"CB II","NamaOutlet":"Corporate Banking II"},{"KodeOutlet_iBSM":"CBT","NamaOutlet":"Corporate & Branch Transformation"},{"KodeOutlet_iBSM":"CCG","NamaOutlet":"Culture & Customer Care"},{"KodeOutlet_iBSM":"CHG","NamaOutlet":"Consumer Finance & Hajj"},{"KodeOutlet_iBSM":"CMG","NamaOutlet":"Commercial Banking"}
答案 0 :(得分:1)
设置window.location.href
并不会立即终止当前脚本 - 我不确定这是跨浏览器的可靠性,但是如果您将window.location.href
设置为超过我在Chrome中的测试一旦在同一个脚本中,浏览器导航到JS函数结束前的 last 值集。
因此,在您的情况下,它将导航到测试数组中最后一项的结果,因为您的$.map()
循环为数组中的每个项运行if / else。
您可以改为使用循环来设置一个标志,以指示该项是否在数组中的任何位置找到:
success : function(outlet){
var idFound = false;
$.each(outlet, function (v) {
if(v.NamaOutlet == id){
idFound = true;
}
});
window.location.href = idFound ? "page_a.php" : "page_b.php";
}
请注意,我已使用$.each()
,因为尽管$.map()
会达到相同的效果,但它并不真正有意义,因为您并未真正进行任何映射。
您可以使用array .some()
method而不是$.each()
来整理这个并删除对标志变量的需求:
success : function(outlet){
if (outlet.some(function(v) { return v.NamaOutlet == id; })) {
window.location.href = "page_a.php";
else {
window.location.href = "page_b.php";
}
}
答案 1 :(得分:0)
我在这里找到的唯一可能的原因是你可能正在使用Internet Explorer而且Internet Explorer并不真正接受相对URL,如其中一个答案中所述 window.location.href not working on IE
休息一切似乎都很好。希望这可以帮助。
答案 2 :(得分:0)
尝试:
var id = "Business Banking";
$.ajax({
type: "GET",
dataType: "json",
url: "<?php echo site_url('con_atk/get_outlet'); ?>",
async: false,
success: function (outlet) {
//[{"KodeOutlet_iBSM":"ACG","NamaOutlet":"Accounting"},{"KodeOutlet_iBSM":"BBG","NamaOutlet":"Business Banking"},{"KodeOutlet_iBSM":"CB I","NamaOutlet":"Corporate Banking I"},{"KodeOutlet_iBSM":"CB II","NamaOutlet":"Corporate Banking II"},{"KodeOutlet_iBSM":"CBT","NamaOutlet":"Corporate & Branch Transformation"},{"KodeOutlet_iBSM":"CCG","NamaOutlet":"Culture & Customer Care"},{"KodeOutlet_iBSM":"CHG","NamaOutlet":"Consumer Finance & Hajj"},{"KodeOutlet_iBSM":"CMG","NamaOutlet":"Commercial Banking"}]
var exist = false;
for (var i = 0; i < outlet.length; i++) {
if (outlet[i].NamaOutlet === id) {
exist = true;
break;
}
}
if (exist) {
window.location.href = "page_a.php";
} else {
window.location.href = "page_b.php";
}
}
});
答案 3 :(得分:0)
如果其他条件不适合您的情况,请让您的id
商业银行,即您给定的json响应的最后一个数组值。所以映射json将检查第一个索引id
,如果不相等,则重定向到page_b
。但id
中存在json response
,因此您的情况不符合条件。您想检查id
中是否存在outlet
以便映射json array
,如果找到重定向页面,如果找不到,请在下一个执行行中写入重定向其他页面....
var id = "Commercial Banking"; // eg value
$.ajax({
type : "GET",
dataType : "json",
url : "<?php echo site_url('con_atk/get_outlet'); ?>",
async : false,
success : function(outlet){
$.map(outlet, function (v) {
if(v.NamaOutlet == id){
window.location.href = "page_a.php";
}
});
window.location.href = "page_b.php";
}
});
答案 4 :(得分:0)
$('#btn').click(function () {
$.ajax({
type: "GET",
url: '/Contrller/Action Name',
data: {},
contentType: "application/json;",
dataType: "json",
success: function (r) {
console.log(r);
if (r == true) {
$.ajax({
type: "GET",
url: '/Contrller/Action',
data: { },
contentType: "application/json;",
dataType: "json",
success: function (r) {
$("#btnclosem").trigger("click")
var select = $("#Div");
select.empty();
select.append($('<option/>', {value: 0,text: "" })); $.each(r.list, function (index, itemData) {
}
});
return false;
}
else {
alert("")
return false;
}
}
});