我通过Ajax POST提交一个简单的表单并获取JSON响应,并使用该响应将数据填充到带滑块的定制音频播放器中。
音频播放器滑块功能在Ajax POST之前工作。但是,在我提交表单后,似乎jQuery Mobile正在刷新页面,在刷新之后,滑块被破坏。
我得到的错误信息是:“错误:在初始化之前无法调用滑块上的方法;尝试调用方法'刷新'”
我的表单代码如下:
<form name="test" method="post">
<input type="hidden" name="action" value="test.php">
<input type="number" name="id" />
<button data-icon="star" onclick="onFormSumbit();">Submit</button>
</form>
我的提交功能如下:
function onFormSumbit() {
$.ajax({
type: $('form').attr('method'),
url: $('form input[name=action]').attr('value'),
data: $('form').serialize(),
dataType: 'json',
success: function(response, textStatus, XMLHttpRequest) {
if (response.error) {
console.log('ERROR: ' + response.error);
} else {
mediaSource = response.url;
console.log('URL: ' + response.url);
console.log('ARTIST: ' + response.artist);
console.log('TITLE: ' + response.title);
}
}
});
}
我的滑块编码如下:
<input type="range" id="slider" value="0" min="0" max="100" step="0.01" data-highlight="true" />
我的滑块功能如下:
playSlider.on('slidestop', function(event,ui) {
mediaObject.seekTo((playSlider.val() / 100) * mediaDuration * 1000);
console.log(playSlider.val());
});
答案 0 :(得分:5)
我将代码修改为以下内容并且页面没有刷新:
$(document).on('submit', '#myForm', function(e) {
e.preventDefault();
postForm();
});
function postForm()
{
$.ajax({
type: $('form').attr('method'),
url: $('form input[name=action]').attr('value'),
data: $('form').serialize(),
dataType: 'json',
async: true,
success: function(data) {
mediaSource = response.url;
},
error: function (xhr, ajaxOptions, thrownError) {
alert("Error: " + xhr.status + "\n" +
"Message: " + xhr.statusText + "\n" +
"Response: " + xhr.responseText + "\n" + thrownError);
}
});
}
<form name="test" id="myForm" method="post">
<input type="hidden" name="action" value="test.php">
<input type="number" name="id"/>
<input type="submit" data-icon="star" value="Submit">
</form>