[英]JavaScript function call not working in Safari on iOS
我使用此JavaScript代碼...
function data_addproduct(id){
var hr = new XMLHttpRequest();
var url = "scripts/data_processing.php";
var data = "addproduct";
var vars = "data="+data+"&id="+id;
hr.open("POST", url, true);
hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
hr.onreadystatechange = function() {
if(hr.readyState == 4 && hr.status == 200) {
var return_data = hr.responseText;
document.getElementById("ui_checkout").innerHTML = return_data;
document.getElementById("ui_checkout_mobile").innerHTML = return_data;
data_refreshtotal();
data_refreshproducts();
}
}
hr.send(vars);
document.getElementById("ui_checkout").innerHTML = "<br>Updating...";
document.getElementById("ui_checkout_mobile").innerHTML = "<br>Updating...";
}
但是在iOS上的Safari中,它沒有調用其他兩個函數...
data_refreshtotal();
data_refreshproducts();
奇怪的是,它在iOS的Chrome瀏覽器中工作正常,有人知道如何在Safari中修復它嗎?
它調用的功能:
function data_refreshtotal(){
var hr = new XMLHttpRequest();
var url = "scripts/data_processing.php";
var data = "refreshtotal";
var vars = "data="+data;
hr.open("POST", url, true);
hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
hr.onreadystatechange = function() {
if(hr.readyState == 4 && hr.status == 200) {
var return_data = hr.responseText;
document.getElementById("ui_total").innerHTML = return_data;
document.getElementById("ui_total_mobile").innerHTML = return_data;
document.getElementById("ui_checkout_notify").innerHTML = "Online EPOS";
}
}
hr.send(vars);
document.getElementById("ui_total").innerHTML = "Updating...";
document.getElementById("ui_total_mobile").innerHTML = "Updating...";
document.getElementById("ui_checkout_notify").innerHTML = "Updating...";
}
function data_refreshproducts(){
var hr = new XMLHttpRequest();
var url = "scripts/data_processing.php";
var data = "refreshproducts";
var vars = "data="+data;
hr.open("POST", url, true);
hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
hr.onreadystatechange = function() {
if(hr.readyState == 4 && hr.status == 200) {
var return_data = hr.responseText;
document.getElementById("ui_checkout").innerHTML = return_data;
document.getElementById("ui_checkout_mobile").innerHTML = return_data;
document.getElementById("ui_checkout_notify").innerHTML = "Online EPOS";
}
}
hr.send(vars);
document.getElementById("ui_checkout").innerHTML = "<br>Updating...";
document.getElementById("ui_checkout_mobile").innerHTML = "<br>Updating...";
document.getElementById("ui_checkout_notify").innerHTML = "Updating...";
}
從您發布的內容來看,唯一有意義的是(以某種方式) data_refreshtotal
和data_refreshproducts
超出范圍。 這是您的相同代碼,經過重構和命名空間以確保在調用每個函數時它們仍在作用域內:
var Cart;
if (!Cart) {
Cart = {};
}
(function () {
'use strict';
Cart.stringificate = function stringificate(data) {
var key = '',
postData = '';
for (key in data) {
if (data.hasOwnProperty(key)) {
postData += '&' + key + '=' + data[key];
}
}
return postData.substring(1);
};
Cart.ajax = function ajax(options) {
var hr = new XMLHttpRequest(),
method = options.method ? options.method.toUpperCase() : "POST",
url = options.url || "scripts/data_processing.php",
i = 0;
hr.open(method, url, true);
hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
hr.onreadystatechange = function () {
if (hr.readyState === 4 && hr.status === 200) {
options.callback(hr.responseText);
}
};
hr.send(Cart.stringificate(options.data));
for (i = 0; i < options.notices.length; i += 1) {
document.getElementById(options.notices[i]).innerHTML = "<br />Updating…";
}
};
Cart.data_refreshtotal = function data_refreshtotal() {
Cart.ajax({
"data": {
"data": "refreshtotal"
},
"callback": function (return_data) {
document.getElementById("ui_total").innerHTML = return_data;
document.getElementById("ui_total_mobile").innerHTML = return_data;
document.getElementById("ui_checkout_notify").innerHTML = "Online EPOS";
},
"notices": [
"ui_total",
"ui_total_mobile",
"ui_checkout_notify"
]
});
};
Cart.data_refreshproducts = function data_refreshproducts() {
Cart.ajax({
"data": {
"data": "refreshproducts"
},
"callback": function (return_data) {
document.getElementById("ui_checkout").innerHTML = return_data;
document.getElementById("ui_checkout_mobile").innerHTML = return_data;
document.getElementById("ui_checkout_notify").innerHTML = "Online EPOS";
},
"notices": [
"ui_checkout",
"ui_checkout_mobile",
"ui_checkout_notify"
]
});
};
Cart.data_addproduct = function data_addproduct(id) {
Cart.ajax({
"data": {
"data": "addproduct",
"id": id
},
"callback": function (return_data) {
document.getElementById("ui_checkout").innerHTML = return_data;
document.getElementById("ui_checkout_mobile").innerHTML = return_data;
Cart.data_refreshtotal();
Cart.data_refreshproducts();
},
"notices": [
"ui_checkout",
"ui_checkout_mobile"
]
});
};
}());
我之所以使用Cart
作為命名空間,僅僅是因為好像您在制作購物車一樣(並且可以快速輸入:))。 嘗試運行此命令,看看是否調用了函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.