我的脑袋快要爆炸了。我无法让它按照我想要的方式工作,而且我似乎无法找出它有什么问题。
我有一个需要使用 AJAX 处理的表单。
但在此之前,我想将其保存在 window.sessionStorage
中。
该功能必须跨设备运行,而我在 iOS 上遇到了问题。
有很多关于 stackoverflow 和谷歌的问题,有各种修复。但它们似乎都不适合我。
我有这个表格:
<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
希望这可能会解决问题,但它没有
我已经尝试使用“正确”的方式使用此sessionStorage.setItem('last', 'search')
设置变量
但无济于事。
无论我做什么,表单仍在提交。
如果我在 sessionStorage
之前 return false;
它工作正常,并停止表单。
它在台式机和安卓上运行良好,但在 iOS 设备上就失败了
我试过的调试:
console.log(sessionStorage.last) returns null
console.log(typeof sessionStorage) returns object
console.log(sessionStorage.last = 'foo') returns foo
如果您需要更多代码/需要我尝试任何东西,请告诉我!
最佳答案
根据 Apple 的文档,它应该可以工作: https://developer.apple.com/library/safari/documentation/iPhone/Conceptual/SafariJSDatabaseGuide/Name-ValueStorage/Name-ValueStorage.html
我使用 localStorage 没有任何问题,但没有使用 sessionStorage(尽管文档说它应该可以互换)。你可以尝试一个 try-catch block ,这样代码就不会崩溃,你可以得到一些线索。 Apple 提到它可能会抛出 QUOTA_EXCEEDED_ERR 异常。
try {
sessionStorage.setItem("last", search);
} catch (e) {
alert("error: " + e);
}
关于javascript - iOS sessionStorage 和表单提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26959373/