AJAX值发送错误

ani*_*ani 5 php ajax jquery json

嗨,我有下面的脚本问题.我认为问题在于需要通过AJAX发送到php的数据.

jQuery的

$('.send').live("click", function(){

    $.ajax({

        url:'foobar.php',
        type:'post',
        data: 'id=' + $(this).attr('id'),
        dataType:'json',
        contentType: 'application/json; charset=utf-8',
        success: function(data) {

            switch (data.status)
            {
                case "a":

                    alert(data.text);

                    break;

                case "b":

                    alert(data.text);

                    break;

                }
            },
        error: function(XMLHttpRequest, textStatus, errorThrown) {

            alert ("error: "+textStatus);

            }
        })
    }
Run Code Online (Sandbox Code Playgroud)

而且,PHP

$id = $_REQUEST['id'];

switch ($id) {

    case "foo":

        $data["status"] = "a";
        $data["text"] = "foo-foo";
        echo json_encode($data);

        break;

    case "bar":

        $data["status"] = "b";
        $data["text"] = "bar-bar";
        echo json_encode($data);

        break;

    }
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做

//data: 'id=' + $(this).attr('id'),
Run Code Online (Sandbox Code Playgroud)

并改变这一点

$id = 'foo';
Run Code Online (Sandbox Code Playgroud)

脚本工作得很好.我需要做些什么来使上面的两个脚本都可以工作?提前致谢.

Ult*_*nct 2

我会将我的评论作为答案。

除了使用已弃用的 jQuery API 之外,其他人没有指出的是以下内容:

您在下面一行中正在做什么:

contentType: 'application/json; charset=utf-8',
Run Code Online (Sandbox Code Playgroud)

是您向服务器承诺 HTTP 实体将是 JSON 字符串,但事实并非如此。它实际上是通常的百分位编码字符串。( a=b&c=d&e=f)。

如果删除该行,浏览器将发送默认值 Content-Type 作为application/x-www-url-form-encoded。这将触发 PHP 解析 HTTP 实体,并为您提供$_REQUEST正确填充的数组。