Php AJAX值发送错误

Php AJAX值发送错误,php,jquery,ajax,json,Php,Jquery,Ajax,Json,嗨,我对下面的脚本有问题。我认为问题在于需要通过AJAX发送到php的数据 jQuery $('.send').live("click", function(){ $.ajax({ url:'foobar.php', type:'post', data: 'id=' + $(this).attr('id'), dataType:'json', contentType: 'application/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);

            }
        })
    }
还有,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';
data: 'id=' + $(this).attr('id'),

剧本写得很好。我需要做什么,使上述两个脚本都可以工作?提前感谢。

您需要对发送的数据进行JSON编码

它应该类似于:“{”id:“'+$(this).attr('id')+'“}'”

更改此选项

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

在这里也使用
on
live
是不推荐的

$('.send').on("click", function(){
你可以用

     $('.send').click(function(){
代替

  $('.send').live("click", function(){
显示时出错


TypeError:Object[Object Object]没有“live”方法(live已弃用)

问题代码中存在一些问题

不要使用
.live()
。它在jQuery1.7中被弃用,在jQuery1.9(最新版本)中被完全删除。相反,请使用
.on()

或者,如果您确实需要活动委派:

$(document).on('click', '.send', function() {
    ...
});
在作为
$.ajax()
参数传递的对象文本中设置
数据
属性时,有两个选项:字符串或对象文本。因此,要么:

data: {id: this.id},

请注意,我使用的是
this.id
,而不是
$(this.attr('id')。为什么?因为它避免了不必要的jQuery使用,而且
.attr()
不是正确的函数-您需要
id
属性,所以应该使用
.prop()
(不过,除非需要,否则不要使用jQuery)

最后,您还没有关闭对
的调用。单击()
,因此需要添加一个
到您发布的代码的末尾

整个事情应该是这样的:

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

    $.ajax({

        url: 'foobar.php',
        type: 'post',
        data: 'id=' + this.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);

        }
    })
});

我会把我的评论作为回答

除了使用不推荐使用的jQuery API外,其他人没有指出的是:

您在以下行中所做的操作:

contentType: 'application/json; charset=utf-8',
您向服务器承诺HTTP实体将是JSON字符串,但事实并非如此。它实际上是通常的百分位编码字符串。(
a=b&c=d&e=f


如果删除该行,浏览器将发送默认值内容类型为
application/x-www-url-form-encoded
。这将触发PHP解析HTTP实体,并给您正确填充的
$\u请求数组。

alert$(this.attr('id'),然后查看结果您用于发布的HTML是什么?您可以检查alert($(this.attr('id'))是“未定义”的吗?或者可以用类“send”显示元素吗live已弃用,请尝试在上使用。对于您的问题,请使用firebug并检查控制台以获取post数据和响应。。Thanks@shin是的,它被警告了,html对象是一个paragraph不需要所有这些额外的引号<代码>{id:$(this).attr('id')}
我已将代码更改为您所说的内容,但仍然得到解析错误您可能需要在服务器端解码JSON字符串,例如@Yogesy Suthar我一直在尝试此解决方案,但代码仍然不起作用,顺便说一句,我使用了最新版本的jQuery和PHP。我已经尝试了这个解决方案,结果和以前一样。现在它有意义了,非常感谢。。这就解决了我的问题,如果这有效的话,那么你可以让未来的访问者知道。
contentType: 'application/json; charset=utf-8',