我有一个使用引导标签的网站,因此我尝试使用Ajax进行最少的刷新工作,但是我在使用mysql查询时遇到ajax帖子的问题直到页面得到了更新。
按下按钮后,Ajax会从该元素的ID中获取该值,并打开一个引导选项卡。这是我希望传递数据的地方,因此结果与用户选择的选项相关。
Modules.php
<a href="#parts" id="100" class="completed"></a>
(Ajax请求)
$(".completed").click(function() {
var element = $(this);
var ID = $(this).attr("id");
var dataString = 'id='+ ID;
$.ajax({
cache: false,
url: "includes/scripts/ajax/module_parts.php",
type: "POST",
datatype: "text",
data: dataString,
success: function (html) {
$('#moduleNum').html(ID);
console.log(ID);
},
error: function(data, errorThrown)
{
alert('request failed :'+errorThrown);
}
});
return false;
});
module_parts.php
$module_id = mysqli_real_escape_string($connection, $_POST['id']);
echo $module_id;
$query = mysqli_query ($connection, "SELECT number FROM Modules WHERE number = '".$module_id."'");
我知道帖子工作正常,因为我尝试将帖子转换为会话,然后在刷新页面时显示数据。
将ID附加到html元素时,数据也会正确显示。
非常感谢, 扎克。
答案 0 :(得分:0)
1)检查id是否通过post传递并通过module_parts获取。
2)我宁愿在通过ajax传递帖子数据时使用对象:
data: { id : ID }
3)检查ajax请求的好选择是使用Firebug(在控制台上),您可以检查请求详细信息而不回显。
答案 1 :(得分:0)
脚本中至少有两件事需要解决。
数据类型应该更改为dataType(文本不是jQuery&#39; s think&#34; types(xml,json,script或html)之一,因此必须正确拼写dataType。
您应该阻止锚点击事件的默认行为。
(".completed").click(function(e) {
e.preventDefault
...
可能还有其他一些问题,但这两个问题突然出现了。
答案 2 :(得分:0)
正如旁注,我更喜欢用ajax shenanigans来做这件事。它可能对你有帮助......
改变锚元素:
<a href="#parts" id="100" class="completed" rel="completed">Click me</a>
使用Javascript:
ID = $(this).attr("id")
$('body').on('click', '[rel="completed"]', function() {
$.post('includes/scripts/ajax/module_parts.php', { id : ID }, function(data) {
$('#moduleNum').html(data); // data or ID ?
}).fail(function() {
alert('request failed');
});
});
$('body').on
部分有助于在插入新链接或按钮时保持脚本处于活动状态。它意味着身体标签内的任何东西,但你可以并且可能应该进一步缩小范围,例如周围的div。
我个人认为,这种方式更容易处理,特别是如果只有简单的数据来回传递。