我正在尝试动态更新PHP函数中的信息。我在我的页面上使用PHP函数:
main();
main()的工作方式如下:
function main() {
global $news;
$news = api($news);
}
当有人点击菜单上的其他“新闻”主题时,我想用AJAX刷新main()以反映新的新闻类别请求。把我的大脑和堆叠架起来,我不确定滑倒的位置。 AJAX请求源自此列表:
<div class="mainleft">
<ul>
<li>World News</li>
<li>Sports</li>
</ul>
</div>
我的JS看起来如下(在最后添加警报以尝试和调试变量):
$(document).ready(function() {
$(".mainleft > ul > li").click(function(){
$.ajax({
type: "POST",
url: "/includes/ajax.php",
data: $(this).text(),
success: function(msg){
alert($(this).text()); // this alert fires but the result is blank
}
});
});
});
ajax.php看起来像:
if ($_POST) {
$news = $_POST;
}
我尝试过GET的结果相同,所以这是我做错的根本原因。
更新#1:
有人建议修复然后删除回复,但另一位成员在评论中提出了同样的修复。该修复程序不起作用,但他们澄清说我需要一个键/值对POST,它将我的javascript更改为:
data: { news: $(this).text() },
然后我的ajax.php:
if (isset($_POST['news'])) {
$news = $_POST['news'];
}
更新#2:
感谢@Sean我明白我正在不正确地显示调试警报,将以下内容添加到更正的javascript中,现在警告正确的列表项:
context: this
但是PHP函数仍然没有更新。
答案 0 :(得分:0)
$(this)
内的alert($(this).text());
$.ajax
超出了范围。您可以在ajax调用之前保存到var
,并引用var
-
$(".mainleft > ul > li").click(function(){
var liText = $(this).text();
$.ajax({
type: "POST",
url: "/includes/ajax.php",
data: liText,
success: function(msg){
alert(liText);
}
});
});
或使用context
ajax选项 -
$(".mainleft > ul > li").click(function(){
$.ajax({
type: "POST",
url: "/includes/ajax.php",
context: this,
data: $(this).text(),
success: function(msg){
alert($(this).text());
}
});
});
注意:正如@Mark B所提到的,你的数据应该有一个密钥才能在php中访问 -
$(".mainleft > ul > li").click(function(){
$.ajax({
type: "POST",
url: "/includes/ajax.php",
context: this,
data: {key: $(this).text()},
success: function(msg){
alert($(this).text());
}
});
});
参考:https://stackoverflow.com/a/1570160/689579 https://stackoverflow.com/a/8070183/689579 jsFiddle:http://jsfiddle.net/h2FLg/(将$(this)保存到var,context:和超出范围的示例)