小编典典

AJAX值发送错误

ajax

嗨,我在下面的脚本中遇到了问题。我认为问题在于需要通过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);

            }
        })
    }

并且,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;

    }

但是,如果我这样做

//data: 'id=' + $(this).attr('id'),

并改变这个

$id = 'foo';

脚本工作正常。我需要做些什么才能使以上两个脚本都能正常工作?提前致谢。


阅读 190

收藏
2020-07-26

共1个答案

小编典典

我将我的评论作为答案。

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

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

contentType: 'application/json; charset=utf-8',

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

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

2020-07-26