2012-10-24 47 views
0

我用這個JavaScript代碼...JavaScript函數調用在Safari沒有工作在iOS

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..."; 

} 

但是在Safari在iOS上,它不是調用其他兩個函數...

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..."; 
} 
+0

這段代碼是內聯的嗎?如果是這樣的話,它放在哪裏? –

+0

它在外部JavaScript(.js)文件中(我用它來處理XML HTTPRequests) – CarlRyds

+0

是否有'document.getElementById(「ui_checkout」)。innerHTML = return_data;'實際上用'return_data'填充'innerHTML'? – pete

回答

0

從您發佈的東西,使任何意義的唯一的事情是,(在某種程度上)data_refreshtotaldata_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&hellip;"; 
     } 
    }; 
    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作爲命名空間,只是因爲它好像你是一個購物車(它很快鍵入:))。嘗試運行這個,看看函數是否被調用。

相關問題