我正在尝试从$.post
返回值,但我无处可去。以下是代码段:
<!-- language: lang-js -->
$(document).ready(function(){
$('.d1').dblclick(function() {
$(this).css("background-color","blue");
var datas = $(this).attr('id');
$.post(
"simpleData.php",
{"chess":datas},
{dataType: "JSON"},
{async:false},
{contentType: "application/json; charset=utf-8"},
{success: function(msg){
alert(msg.d);
var resultAsString = msg.d;
document.write(resultAsString);
}
});
});
});
这是输出的划分。我这里没有收到任何输出:
<!-- language: lang-php -->
<div id = "output">
<?php
echo "This is the default output <br />";
echo $_REQUEST['chess'];
?>
<?php
print_r($_REQUEST);
?>
这是被调用的php程序(simpleData.php
):
<!-- language: lang-php -->
<html>
<body
<?php
$move_from = $_REQUEST['chess'];
var_dump($_REQUEST);
echo "this is move_from $move_from";
?>
</body>
</html>
我收到了正确的输出,但它从未出现在div中。此外,我没有从警报中收到任何输出。
请帮助和建议。
这是更新的代码,遗憾的是仍然无效。结果出现在div中,但它说的都是“未定义”。此外,页面上的棋盘也被删除了。
<script type="text/javascript">
$.ajaxSetup ({
cache: false
});
$(document).ready(function(){
$('.d1').dblclick(function() {
$(this).css("background-color","blue");
var datas = $(this).attr('id');
$.post("simpleData.php", {
data: {"chess":datas},
dataType: "json",
async:false,
contentType: "application/json; charset=utf-8",
header: "HTTP/1.1 200 OK",
success: function(html){
var resultAsString = html;
$("#output").html(resultAsString);
document.write(resultAsString);
}
});
</script>
以下是名为[simpleData.php]的程序:
<html>
<body
<?php
$move_from = $_REQUEST['chess'];
var_dump($_REQUEST);
echo "this is move_from $move_from";
?>
</body>
</html>
以下是Firebug的html输出:
Notice: Undefined index: chess in /var/www/simpleData.php on line 12 array(6) { ["data"]=> array(1) { ["chess"]=> string(2) "e8" } ["dataType"]=> string(4) "json" ["async"]=> string(5) "false" ["contentType"]=> string(31) "application/json; charset=utf-8" ["header"]=> string(15) "HTTP/1.1 200 OK" ["success"]=> string(9) "undefined" } this is move_from
请帮助和建议。 感谢
这是最新的代码:
<script type="text/javascript">
$.ajaxSetup ({
cache: false
});
$(document).ready(function(){
$('.d1').dblclick(function() {
$(this).css("background-color","blue");
var datas = $(this).attr('id');
$.post("simpleData.php", {
data: {"chess":datas},
dataType: "json",
async:false,
contentType: "application/json; charset=utf-8",
header: "HTTP/1.1 200 OK",
success: function(html){
newProcessData(html);
}
});
});
});
function newProcessData(html){
var resultAsString = html;
$("#output").html(resultAsString);
document.write(resultAsString);
alert("yippee");
}
以下是调用的程序(simpleData.php)[它有不更改]
<html>
<body>
<?php
$move_from = $_REQUEST['chess'];
var_dump($_REQUEST);
echo "this is move_from $move_from";
?>
</body>
</html>
我知道代码到达函数newProcessData,因为显示了警告。
以下是Firebug的输出:
接头:
Date Mon, 22 Aug 2011 04:01:42 GMT
Server Apache/2.2.19 (Debian)
X-Powered-By PHP/5.3.7-1
Vary Accept-Encoding
Content-Encoding gzip
Content-Length 401
Keep-Alive timeout=15, max=99
Connection Keep-Alive
Content-Type text/html
Request Headersview source
Host localhost
User-Agent Mozilla/5.0 (X11; Linux i686; rv:6.0) Gecko/20100101 Firefox/6.0 Iceweasel/6.0
Accept */*
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip, deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection keep-alive
Content-Type application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With XMLHttpRequest
Referer http://localhost/jq3_test.php
Content-Length 137
Pragma no-cache
Cache-Control no-cache
POST:
async false
contentType application/json; charset=utf-8
dataType json
data[chess] e8
header HTTP/1.1 200 OK
success undefined
Source
data%5Bchess%5D=e8&dataType=json&async=false&contentType=application%2Fjson%3B+charset%3Dutf-8&header=HTTP%2F1.1+200+OK&success=undefined
HTML:
Notice: Undefined index: datas in /var/www/simpleData.php on line 13 array(6) { ["data"]=> array(1) { ["chess"]=> string(2) "e8" } ["dataType"]=> string(4) "json" ["async"]=> string(5) "false" ["contentType"]=> string(31) "application/json; charset=utf-8" ["header"]=> string(15) "HTTP/1.1 200 OK" ["success"]=> string(9) "undefined" } this is move_from
任何可以呈现的帮助都将受到高度赞赏 感谢
答案 0 :(得分:2)
这可能不是完全的原因,但是当jQuery要求dataType:'json'时,手册显示为小写,而不是大写(不确定是否重要) - PHP需要识别输出为带有标题的json(并且还返回OK状态),如下所示:
header("HTTP/1.1 200 OK");
header('Content-type: application/json');
在回显任何数据之前。
也不要返回html标签,只需调用json头,echo输出,然后退出()。
哦,数组需要编码为JSON:
echo json_encode($_REQUEST['chess']);
<强>编辑:强> 我想你可能会把一些建议放在错误的地方 - 试试这个。 你的simpleData.php从头到尾,应该看起来像这样返回JSON数据:
<?php
header("HTTP/1.1 200 OK");
header('Content-type: application/json');
echo json_encode($_REQUEST);
exit();
?>
请注意缺少周围的HTML标记或php标记之外的任何内容。你不能两种方式,一个返回HTML进行调试的脚本和一个返回不会破坏jQuery帖子的正确JSON的脚本。
如果你想在查看发布帖子的HTML页面时看到simpleData.php的JSON响应,请安装类似firefox的firebug插件的工具,并观察NET面板以便能够准确地检查发生了什么帖子。
现在,从您的javascript中删除标题内容类型内容,这是在错误的位置添加的:
$.post("simpleData.php", {
data: {"chess":datas},
dataType: "json",
async:false,
contentType: "application/json; charset=utf-8",
header: "HTTP/1.1 200 OK",
success: function(html){
newProcessData(html);
}
});
应该成为:
$.post("simpleData.php", {
data: {"chess":datas},
dataType: "json",
async:false,
success: function(html){
newProcessData(html);
}
});
答案 1 :(得分:2)
您可以参考官方的jquery文档,了解发布到php和更新div的简单示例:
http://api.jquery.com/jQuery.post/
如:
$.post('ajax/test.html', function(data) {
$('.result').html(data);
});
答案 2 :(得分:0)
$.post("simpleData.php", {
data: {chess:datas},
dataType: "html",
async:false,
success: function(html){
alert(html);
var resultAsString = html;
document.write(resultAsString);
}
});
你的语法有点奇怪,试试上面的版本(虽然说实话,不应该正常使用document.write)。
答案 3 :(得分:0)
我认为你需要在原始文件中,而不是.php文件。
{success: function(msg){
alert(msg.d);
var resultAsString = msg.d;
//document.write(resultAsString);
$("#output").html(resultAsString); //this will add it to the div
}
答案 4 :(得分:0)
我不是PHP程序员,但基于您提供的以下输出
["data"]=> array(1) { ["chess"]=> string(2) "e8" }
看起来“国际象棋”数据仍然在$ _REQUEST中的“数据”中。您应该尝试使用$ _REQUEST ['data'] ['chess']来查看是否可行。