0

私はこの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では、他の2つの関数を呼び出していません...

data_refreshtotal();
data_refreshproducts();

Chrome for iOS で問題なく動作するので奇妙ですが、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...";
}
4

1 に答える 1

0

あなたが投稿したことから、意味のある唯一のことは、(どういうわけか)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&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したのは、単にショッピング カートを作成しているように見えるからです (そして、タイプするのが簡単でした :) )。これを実行してみて、関数が呼び出されるかどうかを確認してください。

于 2012-10-25T00:29:28.490 に答える