iOS sessionStorage和表单提交

时间:2014-11-16 16:41:03

标签: javascript jquery ios ajax forms

我的脑袋即将爆炸。我不能按照我想要的方式工作,而且我似乎无法找出它的错误。

我有一个表格需要用AJAX处理。
但在我这样做之前,我想将其保存在window.sessionStorage

该功能必须跨设备工作,并且我遇到了iOS问题。

关于stackoverflow和google有很多关于此问题的问题,有各种修复方法。但它们似乎都不适合我。

我有这样的表格:

<form role="form" id="searchForm" data-method="search" action="" onsubmit="return doStuff('search')" data-ajax="false">
    <div class="form-group">
        <input type="search" id="search" name="s" class="form-control" placeholder="Search...">
        <span class="help-block"><small>Search by partnumber, suppler or free text</small></span>
    </div>
    <button type="submit" data-ajax="false" class="btn btn-block btn-warning">Search</button>
</form>

现在,当提交表单时,它会运行大约200行的函数,我将其缩小到代码中断的位置。
就在这里:

sessionStorage.last = search;
return false;

我 已经从localStorage转到sessionStorage,希望可以解决问题,但没有

我已经尝试过&#34;对&#34;使用此sessionStorage.setItem('last', 'search')设置变量的方法 但没有帮助。

无论我做什么,表格仍在提交。 如果我return false;sessionStorage之前它正常工作,并停止表单。

它适用于台式机和Android,但它在iOS设备上失败

调试我已尝试过:

console.log(sessionStorage.last) returns null
console.log(typeof sessionStorage) returns object
console.log(sessionStorage.last = 'foo') returns foo

如果您需要更多代码/需要我尝试任何事情,请告诉我!

1 个答案:

答案 0 :(得分:1)

根据Apple的文档,它应该有效: https://developer.apple.com/library/safari/documentation/iPhone/Conceptual/SafariJSDatabaseGuide/Name-ValueStorage/Name-ValueStorage.html

我使用localStorage没有任何问题,但没有使用sessionStorage(尽管文档说它应该可以互换)。你可以试试try-catch块,这样代码就不会崩溃,你可以得到一些线索。 Apple提到它可能抛出QUOTA_EXCEEDED_ERR异常。

try {
    sessionStorage.setItem("last", search);
} catch (e) {
    alert("error: " + e);
}