Пожалуйста помоги,
У меня есть динамически генерируемый набор инкрементных входов. Сначала я сохраняю идентификаторы и значения в localstorage, и все идет хорошо, и я могу видеть все пары id-значение, но я не могу отправить данные с помощью вызова 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>
Но ничего не происходит при нажатии кнопки.
Что я делаю не так?
Несмотря на то, что ваш код выглядит нормально, отправка ваших локальных данных по одному в цикле не является неэффективной. Имеет больше смысла преобразовать ваше локальное хранилище в строку json и отправлять все одновременно. Вы можете json_decode Строка JSON в вашем скрипте обновления PHP. Также я включил функцию для проверки, если 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;
}
}
Других решений пока нет …