我的脚本文件中有以下代码:
$.ajax({
url: "server.php?saveEvent",
data: "myEvent=" + JSON.stringify(myEvent),
dataType: "json",
type: "post",
success: function (data) {
if (data) {
$("#log").append("<br />Evenement saved.");
}
}
});
在server.php中,我使用:
检索变量if (isset($_GET['saveEvent'])) {
if (isset($_POST['myEvent'])) {
$firephp->log(gettype($_POST['myEvent']));
$myEvent = json_decode($_POST['myEvent'], true);
}
}
当我在本地主机上测试时,一切都很顺利。不幸的是,部署后 $ myEvent 空了。
使用firephp,我测试了变量中的内容,然后查看了正在发送的标题。该对象被发送到服务器,但仍然以某种方式php看到它是一个空变量。
关于如何做到这一点的任何想法?它是php版本还是json问题?
编辑:PHP ver = 5.2.17 / json启用
EDIT2:将网址更改为?saveEvent = 1没有改变任何内容
Edit3:我意识到制作一个get和post有点奇怪,我会尝试改变它,但是get / post应该不是我认为的问题
答案 0 :(得分:2)
您的uri包含 GET 参数saveEvent
。您正在检查POST
仅数据
尝试检查:$_GET['saveEvent']
即便如此,该参数还没有为其分配值,可能会将网址更改为?saveEvent=1
。
您也没有理由使用2 if语句:
if (isset($_GET['saveEvent'] && isset($_POST['myEvent']))
{
//do stuff
}
由于似乎除GET
与POST
问题之外还有更多问题,您可能需要在网址末尾添加&符号(&
):查看你的控制台,XHR请求只是在你的网址末尾粘贴POST参数,所以uri看起来像以下网址之一:
server.php?saveEvent=truemyEvent=foo
server.php?saveEvent=1myEvent=foo
server.php?saveEventmyEvent=foo
//or
server.php?saveEvent=1?myEvent=foo
然而,您需要的是:
server.php?saveEvent=1&myEvent=foo&something=else
基本上,坚持1种方法,POST或GET,并确保各种参数分开,因为它们应该分开。
我不确定这是否是问题,但尝试var_dump
- $_REQUEST
超级全球,$_GET
,$_POST
以及你有什么......
答案 1 :(得分:1)
您的服务器是否正确使用了server.php?saveEvent
的行为?这样做的行为可能因服务器或PHP版本而异。将PHP变量设置为什么?使用这种简写并不是很清楚,所以我会像你一样使用isset()
而感到紧张。我会使用像server.php?saveEvent=true
那样更普通的东西,这样你就可以确定saveEvent
了。
答案 2 :(得分:1)
尝试在数据中使用对象而不是字符串
data: {myEvent:myEvent},