dataType:“json”无效

时间:2012-04-02 23:20:04

标签: php ajax json

我正在尝试使用数组中的json将多个变量从php文件发送回ajax。 php文件中的代码完美运行,并且应该像我的数据库一样完成所有操作。但是当我在ajax中添加dataType:“json”时,php文件中就没有任何事情发生了。我google了一下,有些人提到它可能是一个浏览器问题,但到目前为止它无法在firefox,chrome或IE中使用。我正在使用最新版本的jQuery。

这是在php中发生的事情:

<?php
//Create variables and update database

echo json_encode(array("id" => "$realid", "un" => "$username", "date" => "$date"));
?>

这是ajax代码:

.ajax(
{
   url: 'UpdateComments.php',
   type: 'POST',
   dataType: "json",
   data: 
   {
      type: "add",
      comment: $("#comment").val(),
      id: videoID  
   },
   success: function (data) 
   {
       //Get the data variables from json and display them on page
   }
});

我对此毫无头绪,任何建议都将不胜感激!

7 个答案:

答案 0 :(得分:9)

常见问题是浏览器会打印&#34;其他内容&#34;在JSON之前是否有一些可读或不可读(不可见)char。尝试做这样的事情:

<?php
//at the very beginning start output buffereing
ob_start();

// do your logic here

// right before outputting the JSON, clear the buffer.
ob_end_clean();

// now print
echo json_encode(array("id" => $realid, "un" => $username, "date" => $date));
?>

现在,所有补充数据(在JSON之前)将被丢弃,你应该让它工作......

答案 1 :(得分:1)

我相信如果您使用dataType,您应该使用contentType,“JSON的官方Internet媒体类型是application / json”。

.ajax(
{
 url: 'UpdateComments.php',
 type: 'POST',
 contentType: "application/json",//note the contentType defintion
 dataType: "json",
 data: 
 {
   type: "add",
   comment: $("#comment").val(),
   id: videoID  
 },
 success: function (data) 
 {
   //Get the data variables from json and display them on page
 }
});

答案 2 :(得分:1)

很容易忘记过去可能用来测试脚本工作方式的echovar_dump()

在我自己的脚本中,我忘记了一个var_dump(),它没有使用JSON_encode编码的文本,而是向浏览器发送了纯文本。这违反了dataType:“ json”的要求,并导致成功功能无法正常工作。

花了我一段时间才发现问题,因为我只有echo ctrl + f (ed),却忘记了流浪者{{1} }。

var_dump()可能是另一个嫌疑人。

答案 3 :(得分:0)

如果在jQuery中设置dataType,则实际设置Content-Type头属性。也许,在您的PHP脚本中,您需要将此MIME类型声明为已接受。您是否注意到代码在您发出请求时是否进入了PHP脚本?如果它在Firefox,Chrome或IE中不起作用,我怀疑这是一个浏览器问题。

要获得更好的AJAX请求视角,请订阅ajaxBeforeSend(不确定事件名称是否正确检查jQ docs)事件并记录xhr对象。

答案 4 :(得分:0)

我不会使用dataType,如果它导致你的问题,我个人也没有使用过对象作为数据值之前可能与它有关吗?

无论如何,我已经调整了主要的ajax例程,我希望这会有所帮助。

$.ajax(
{
   url: 'UpdateComments.php',
   type: 'POST',
   data: 
   {
      type: "add",
      comment: $("#comment").val(),
      id: videoID  
   },
   success: function (response) 
   {
       //Get the data variables from json and display them on page
       var data = $.parseJSON(response);
       alert(data.id);
   }
});

答案 5 :(得分:0)

尝试将错误处理程序定义为$ .ajax调用的一部分

$.ajax({
  ...,
  error: function(xml, error) {
    console.log(error);
  }
});

然后检查调试控制台是否有任何可以帮助您诊断问题的错误。

答案 6 :(得分:0)

        $.ajax({
    
       url: '/route/',
       type: 'POST',
       dataType: "json",
       data: 
       {
          type: "add",
          comment: $("#comment").val(),
          id: videoID  
       },
       success: data => {console.log(data);}
    
    });
    
    <?php
    
ob_start();
    
ob_end_clean();
    
echo json_encode(array("id" => "$realid", "un" => "$username", "date" => "$date"));
    ?>