您好我的下面的脚本有问题。我认为问题在于需要通过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';
脚本工作得很好。我需要做些什么来使上面的两个脚本都可以工作?提前谢谢。
答案 0 :(得分:3)
更改此
data: 'id=' + $(this).attr('id'),
到
data: {id : $(this).attr('id')},
此处也使用on
,不推荐使用live
$('.send').on("click", function(){
答案 1 :(得分:2)
我会将我的评论作为答案。
除了使用已弃用的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
数组。
答案 2 :(得分:0)
您需要对正在发送的数据进行JSON编码。
它应该类似于:'{“id”:“'+ $(this).attr('id')+'”}}
答案 3 :(得分:0)
你可以使用,
$('.send').click(function(){
而不是
$('.send').live("click", function(){
显示错误
TypeError:Object [object Object]没有方法'live'(不推荐使用)
答案 4 :(得分:0)
问题中的代码中存在一些问题。
请勿使用.live()
。它在jQuery 1.7中被弃用,并在jQuery 1.9(最新发布版本)中完全删除。相反,请使用.on()
:
$('.send').on('click', function() {
...
});
或者,如果您确实需要事件委托:
$(document).on('click', '.send', function() {
...
});
在对象文字中设置data
属性作为$.ajax()
的参数传递时,您有两个选项:字符串或对象文字。所以:
data: {id: this.id},
或
data: 'id=' + this.id,
请注意,我使用的是this.id
,而不是$(this).attr('id');
。为什么?因为它避免了不必要的jQuery使用,并且因为.attr()
不是正确的函数 - 你需要id
属性,所以你应该使用.prop()
(但是,再次,不要使用jQuery,除非你需要)。
最后,您尚未关闭对.click()
的通话,因此您需要在发布的代码末尾添加);
。
整个事情应该是这样的:
$('.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);
}
})
});