Php AJAX值发送错误
嗨,我对下面的脚本有问题。我认为问题在于需要通过AJAX发送到php的数据 jQueryPhp 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;
$('.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',