0

I have the following code in my script file:

$.ajax({
    url: "server.php?saveEvent",
    data: "myEvent=" + JSON.stringify(myEvent),
    dataType: "json",
    type: "post",
    success: function (data) {
        if (data) {
            $("#log").append("<br />Evenement saved.");
        }
    }
});

In server.php I retrieve the variable using:

if (isset($_GET['saveEvent'])) {
    if (isset($_POST['myEvent'])) {
        $firephp->log(gettype($_POST['myEvent']));
        $myEvent = json_decode($_POST['myEvent'], true);
    }
}

When I tested this on my localhost, everything went fine. Unfortunately, after deployment, $myEvent was empty.

Using firephp, I tested what was in the variable, and I looked at the headers being sent. The object was sent to the server, but still somehow php see's it as being an empty variable.

Any ideas on how this is possible? Is it a php version or json issue?

EDIT: PHP ver= 5.2.17 / json enabled

EDIT2: Changing te url to ?saveEvent=1 didnt change anything

Edit3: I realize making a get and post is a bit strange, I'll try changing that, but get/post shouldn't be a problem I think

4

3 回答 3

2

您的 uri 包含一个GET参数,saveEvent. 您POST只检查数据

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

即便如此,该参数还没有分配给它的值,也许将 url 更改为?saveEvent=1.
您也没有理由使用 2 个 if 语句:

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

由于似乎不仅仅是GETvs.POST问题,您可能希望&在您的 url 末尾添加一个 & 符号 ( ):查看您的控制台,XHR 请求只是将 POST 参数粘贴到您的 url 末尾,所以 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以及您有什么...

于 2012-11-05T20:06:37.350 回答
1

server.php?saveEvent您的服务器是否正确定义了使用行为?这样做的行为可能因服务器或 PHP 版本而异。PHP 变量的设置是什么?使用那个速记并不完全清楚,所以我会isset()像你一样紧张。我会使用更普通的东西server.php?saveEvent=true,这样你肯定saveEvent会被设置。

于 2012-11-05T20:05:38.220 回答
1

尝试在数据中使用对象而不是字符串

data: {myEvent:myEvent},
于 2012-11-05T20:12:57.453 回答