嗨,我在下面的脚本中遇到了问题。我认为问题在于需要通过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';
脚本工作正常。我需要做些什么才能使以上两个脚本都能正常工作?提前致谢。
我将我的评论作为答案。
除了使用已弃用的jQuery API外,其他人没有指出的是以下内容:
您在下一行中正在做什么:
contentType: 'application/json; charset=utf-8',
是您向服务器保证HTTP实体将是JSON字符串,而事实并非如此。它实际上是通常的百分位数编码的字符串。(a=b&c=d&e=f)。
a=b&c=d&e=f
如果删除该行,浏览器会将默认值Content-Type发送为application/x-www-url-form- encoded。这将触发PHP如此解析HTTP实体,并为您$_REQUEST正确填充数组。
application/x-www-url-form- encoded
$_REQUEST