2012-06-18 33 views
0

假设我有2个PHP文件:index.php文件和ajax.phpjson_encode犯规响应正确的JSON数据

这是index.php文件:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

<META http-equiv=Content-Type content="text/html; charset=utf-8"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Website title</title> 
<link href="css.css" rel="stylesheet" type="text/css" /> 
<script type="text/javascript" src="jquery.js"></script> 

</head> 
<body> 


<script type="text/javascript"> 
    ajax_register = function(){ 
     $.ajax({ 
      type: "post", 
      url: 'ajax.php', 
      dataType: 'json', 
      data: "act=register", 
      success: function(data){ 
       //var json = $.parseJSON(data); 
       //alert(json); 
       alert(data.result); 

      }, 
      error: function(e){ 
       alert("Error : " + e); 
      } 
     }); 
    }; 

</script> 

<form name="myForm" id="myForm" method="post"> 
    Your name : 
    <input type="text" name="name" id="name" /> 
    <a href="javascript:void(0)" onclick="ajax_register()">Register</a> 
</form> 

</body> 
</html> 

这是ajax.php:

<?php 
$result = array("result"=>"Success"); 
echo json_encode($result); 
exit; 

但我总是有“错误”警报对话框。

看看Firebug,我看到响应数据包含所有html元素,而不是仅包含json数据。

尝试通过编辑ajax.php发送标题为 “JSON”:

<?php 
header("Content-type: application/json"); 
    $result = array("result"=>"Success"); 
    echo json_encode($result); 
exit; 

但它不工作。响应标题总是:Content-Type:text/html;

UPDATE

这是ajax.php响应:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 

    <META http-equiv=Content-Type content="text/html; charset=utf-8"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title>Website title</title> 
    <link href="css.css" rel="stylesheet" type="text/css" /> 
    <script type="text/javascript" src="jquery.js"></script> 

    </head> 
    <body> 


    <script type="text/javascript"> 
     ajax_register = function(){ 
      $.ajax({ 
       type: "post", 
       url: 'ajax.php', 
       dataType: 'json', 
       data: "act=register", 
       success: function(data){ 
        //var json = $.parseJSON(data); 
        //alert(json); 
        alert(data.result); 

       }, 
       error: function(e){ 
        alert("Error : " + e); 
       } 
      }); 
     }; 

    </script> 

    <form name="myForm" id="myForm" method="post"> 
     Your name : 
     <input type="text" name="name" id="name" /> 
     <a href="javascript:void(0)" onclick="ajax_register()">Register</a> 
    </form> 
{"result":"Success"} 

什么我错在这里?

谢谢你的时间!

+1

什么是错误的响应HTML元素?它是您认识的HTML(您是否写过),还是来自Web服务器返回的错误页面?错误回调完全被使用表明你得到的不是来自服务器的200响应 –

+1

也许以前的响应被'$ .ajax'缓存。尝试将'cache'选项设置为'false'。然后重新启动浏览器。 – flowfree

+1

如果您直接在浏览器中打开ajax.php网址,该怎么办? –

回答

0

我只改变了这种LOC <script type="text/javascript" src="jquery.js"></script>

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script> 

检查你的代码,并在我结束..check JS错误,其所有工作的罚款可能是JS冲突的情况。 (提醒我成功)。让我知道如果问题仍然存在

index.php CODE -

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

<META http-equiv=Content-Type content="text/html; charset=utf-8"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Website title</title> 
<link href="css.css" rel="stylesheet" type="text/css" /> 
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script> 

</head> 
<body> 


<script type="text/javascript"> 
    ajax_register = function(){ 
     $.ajax({ 
      type: "post", 
      url: 'ajax.php', 
      dataType: 'json', 
      data: "act=register", 
      success: function(data){ 
       //var json = $.parseJSON(data); 
       //alert(json); 
       alert(data.result); 

      }, 
      error: function(e){ 
       alert("Error : " + e); 
      } 
     }); 
    }; 

</script> 

<form name="myForm" id="myForm" method="post"> 
    Your name : 
    <input type="text" name="name" id="name" /> 
    <a href="javascript:void(0)" onclick="ajax_register()">Register</a> 
</form> 

</body> 
</html> 

ajax.php CODE ---

<?php 
$result = array("result"=>"Success"); 
echo json_encode($result); 
exit; 

上点击在寄存器警报Success

+0

感谢您的回答,重新启动我的系统后它工作正常。但我标记你的答案已被接受。 –

+0

@ quangtruong1985谢谢很多人...我认为它只是需要一个硬刷新.. cheers :) – swapnesh

-1

我想你可以把这个信号

data: "act=register", 

改变

data: " act : register ",