我有这个脚本,每个用户都可以个性化每个可用的小部件(id、样式、位置……),并且他们的更改被保存到 HTML5 本地存储中 - 但我也想将这些变量传递给 MySQL db,所以如果一个人从不同的浏览器访问站点,他们不必从头开始重新排列所有内容,但是如果本地存储为空,则那些先前设置的变量将从 MySQL 数据库中提取。
我不知道如何将这 3 个变量从本地存储保存的 JS 文件传递到 MySQL db。
我猜我应该从 Ajax 调用 PHP 查询文件,但不确定如何。
//** SAVE SETTINGS FUNCTION **//
function saveSettingsWidget(){
if(localStorage && o_localStorage){
var storeSettings = [];
obj.find(o_widgetClass).each(function(){
var storeSettingsStr = {};
storeSettingsStr['id'] = $(this).attr('id');
storeSettingsStr['style'] = $(this).attr('data-attstyle');
storeSettingsStr['hidden'] = ($(this).is(':hidden') ? 1 : 0);
storeSettings.push(storeSettingsStr);
});
var storeSettingsObj = JSON.stringify( {'widget':storeSettings} );
/* Place it in the storage(only if needed) */
if(getKeySettings != storeSettingsObj){
localStorage.setItem(keySettings, storeSettingsObj);
}
}
}
更新:
好的,所以我设法用 Ajax 调用 PHP(带有插入和更新查询),一切正常,MySQL db 更新所有值。
现在,意图是在本地存储为空时调用这些值。
我创建了一个 PHP 查询,它以与本地存储存储它们的方式完全相同的方式输出值:
$query = "SELECT id , position , color , title , hidden , collapsed FROM mod_pos ORDER BY `position` ASC";
if($result = mysql_query($query))
{
// fetch data
while ($row = mysql_fetch_assoc($result))
{
$row_set[] = $row;
}
// set the output
$jsonsettings = json_encode($row_set);
}
$json='{"widget":' .$jsonsettings. '}' ;
echo $json;
所以输出是
{"widget":[{"id":"widget1-42","position":"0","color":"default","title":"Title1","hidden":"0","collapsed":"0"},{"id":"widget5-42","position":"1","color":"default","title":"Title5","hidden":"1","collapsed":"0"}]}
现在 - 如果我的本地存储是空的,我希望这些保存的值被我假设解析:
var url = "url-to-php-file-with-json-output.php"
$.getJSON(url,function(json){ });
但我在哪里做...
在 JS 文件中有一个设置键的部分:
if(localStorage && o_localStorage) // this is if localStorage is enabled and there are values in browser's local storage
{
var keySettings = 'widgets_settings_'+location.pathname+'_'+objId;
var getKeySettings = localStorage.getItem(keySettings);
}
我应该放一个
else { $.getJSON ...}
在这里,我应该以不同的方式定义键,因为通过查看:
var keySettings = 'widgets_settings_'+location.pathname+'_'+objId;
那是本地存储的标识符 - 它取代了实际输出,这与新的数据源无关,现在是 mysql 输出。
或者我应该跳过该部分并在此处指定它:
if(localStorage && o_localStorage && getKeySettings){
var jsonSettings = JSON.parse(getKeySettings);
如何...
我知道这对某些人来说一定是一个完全荒谬的问题,但如果可能的话,我真的很感激更详细的帮助。
谢谢万