ajax发布后的空php变量

时间:2012-11-05 19:58:47

标签: php jquery ajax json deployment

我的脚本文件中有以下代码:

$.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应该不是我认为的问题

3 个答案:

答案 0 :(得分:2)

您的uri包含 GET 参数saveEvent。您正在检查POST仅数据

尝试检查:$_GET['saveEvent']

即便如此,该参数还没有为其分配值,可能会将网址更改为?saveEvent=1
您也没有理由使用2 if语句:

if (isset($_GET['saveEvent'] && isset($_POST['myEvent']))
{
    //do stuff
}

由于似乎除GETPOST问题之外还有更多问题,您可能需要在网址末尾添加&符号(&):查看你的控制台,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},