【问题标题】:Cannot store localstorage values via AJAX无法通过 AJAX 存储本地存储值
【发布时间】:2015-04-08 09:28:59
【问题描述】:

请帮忙, 我有一组动态生成的按钮递增输入。首先,我将 id 和值存储到 localstorage 中,一切正常,我可以看到所有 id-value 对,但我无法使用 AJAX 调用发送数据。 这是它的样子:

AJAX 是在按钮点击时分配的:

<script>
        $("#send_order").click(function (e) {
            if (localStorage) {
                if (localStorage.length) {
                    for (var i = 0; i < localStorage.length; i++) {
                        var pid = localStorage.key(i);
                        var value = localStorage.getItem(localStorage.key(i));

                        $.ajax({                                
                            url: "update.php?pid="+pid+"&qty="+value,
                            success: function(){
                                alert( "Прибыли данные: ");
                            }
                        });

                    }
                } else {
                    output += 'Нет сохраненных данных.';
                }
            } else {
                output += 'Ваш браузер не поддерживает локальное хранилище.';
            }
            )};
    </script>

但是当按钮被点击时没有任何反应。 我做错了什么?

【问题讨论】:

  • 对我来说很好 :) 我使用的是 Chrome 40.0.2214.111(最新)
  • 控制台有错误吗?设置断点并单步执行代码并检查变量?
  • 我看到您正在循环执行 ajax 调用。您不认为一次发送本地存储数组(只有一个 ajax 调用)更有效吗?
  • 您确定您正在测试的浏览器支持 localStorage 吗?如果实际触发了任何 Ajax 调用,你检查过 DevTools -> Network 吗?

标签: php jquery ajax local-storage


【解决方案1】:

虽然您的代码看起来不错,但在循环中一一发送本地存储数据效率很低。将 localstorage 转换为 json 字符串并同时发送所有内容更有意义。您可以在 php 更新脚本中 json_decode json 字符串。我还包含了一个函数来测试localStorage 是否可用,通过尝试写入它。这比if(localStorage)更可靠

 $("#send_order").on("click", function () {   
    var output='';
    if(localStorageTest() === true){
        console.log('localStorage is available');
        if(localStorage.length){
            var data=JSON.stringify(localStorage);
            $.ajax({ 
                    type: "GET",                               
                    url: "update.php?data="+data,
                    success: function(){
                               alert( "your data is send correctly!");
                    }
            }); 

        }else{
           output += 'localStorage is empty\n';     
        }
    }else{
        output += 'localStorage is not available\n';
    }
})

function localStorageTest(){
    var test = "test";
    try {
        localStorage.setItem(test, test);
        localStorage.removeItem(test);
        return true;
    } catch(e) {
        return false;
    }
}

【讨论】:

  • This is more reliable then if(localStorage)。我不得不在这方面不同意你的观点:) OP 所做的称为功能测试,它是迄今为止检查浏览器是否支持某些功能的最简单和最好的方法
  • 谢谢卡斯帕!工作正常!
  • @Arkantos:对不起,你错了。当 localStorage 不可用时,较旧的浏览器可能会将 if(localStorage) 评估为 true。查看现代化者来源:github.com/Modernizr/Modernizr/blob/master/feature-detects/…
  • @kasper Taeymans.. 我不知道如果它被禁用或 iOS 问题它可能会抛出异常,感谢您指出:-)
猜你喜欢
  • 2014-03-25
  • 2019-01-07
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
  • 1970-01-01
  • 2014-10-22
  • 2018-02-25
  • 1970-01-01
相关资源
最近更新 更多