【问题标题】:Sends AJAX, PHP query and return JSON and AJAX do not understand with "dataType: 'json'"发送 AJAX、PHP 查询并返回 JSON 和 AJAX 不理解 "dataType: 'json'"
【发布时间】:2026-02-01 21:30:01
【问题描述】:

我是 jQuery 开发的新手,我有一个问题,为什么我不能使用 dataType:'json'$.parseJSON 来处理返回从 PHPAJAX (jQuery) 的查询。

reader.js

$(function(){

    //Modal form which encapsulates the loading of information occurs
var modal = $('.modal');
    //Encapsulates the existing list or the list elements, each element has an "edit" button
var lista = $('.lista');

lista.on('click','.actionedit',function(){
    var id = $(this).attr('href');
    var li = lista.find('li[class*="j_'+id+'"]');

    $.ajax({
        url:            'php/controller.php',
        data:           'acao=consulta&editid='+id,
        type:           'POST',
        //contentType:    'application/json; charset=utf-8;',
        dataType:       "json",
        error:          function (xhr, ajaxOptions, thrownError) {
                            alert('Erro: "'+ xhr.status + '"\nMensagem: " ' + thrownError +'"');
                        },
        beforeSend:     function(){ 
                            li.css("background","#0F6") },
        success:        function( carga ){

                                //alert( carga );
                            alert( carga.nome );

                            //modal.fadeIn("slow");
                            //modal.find('form span[class="filebar"]').text(carga.file);
                            //modal.find('form input[name="titulo"]').val(carga.title);
                            //modal.find('form textarea').append(carga.description;
                        },
        complete:       function(){ loader.fadeOut("slow"); },
    });

    return false;
});
});

controller.php

<?php
require_once("conexao.php");

switch($_POST['acao']){

case 'consulta':
    //Validates query, that returns a json string...
    $editid = $_POST['editid'];
    $qr = "SELECT * FROM mod6_uploads WHERE id = '$editid'";
    $ex = mysql_query($qr);
    $st = mysql_fetch_array($ex);

    //Return array in json format string for testing...
    $u['file'] = 'File';
    $u['title'] = 'File title';
    $u['description'] = 'File Description';

    echo json_encode($u);

break;
default:
    echo 'Error querying';

}

因此,警报向我返回以下消息:

Error: "200"
Message: "SyntaxError: JSON.parse: unexpected character"

如果我注释 dataType:"json",它会返回以下警告:未定义

如果我将警报从“alert (carga.nome)”更改为“alert (load)”,它会返回以下内容:

{"name": "File", "title": "File Title", "description": "File Description"}

另外,正如我之前所说,如果我使用$.ParseJSONJSON.parse 没有任何返回,或者错误或者成功。

有人遇到过这样的事情吗? 如果有人可以帮助我,我将不胜感激!

【问题讨论】:

  • 您在 php 中的哪个位置设置“名称”属性?还是你把它关掉了
  • 你需要使用dataType: "json" OR $.parseJSON,不能同时使用。完全按照您在问题中编写的方式应该可以正常工作。
  • 您已经告诉 jquery 在响应中期待 JSON。如果您的服务器在您的实际 json 字符串之前或之后输出 ANYTHING else,那么您正在执行此警告 - JSON 语法非常严格,并且类似于 PHP 警告或其他“垃圾”之类的东西会导致json的jquery解码失败。确保没有 PHP 警告、unicode BOM 等正在输出。
  • 如果您使用的是 Google Chrome,您可以按 F12,然后选择 Network 选项卡并查找当前请求,然后选择 Response 选项卡以查看服务器返回的确切内容。也许这些信息对你有用
  • @AlexW $.ajax 中的Content-type 仅指浏览器发送的内容,而不是服务器返回的内容。

标签: javascript php jquery ajax json


【解决方案1】:

我会改变这一行:

data:  'acao=consulta&editid='+id,

通过这个:

data:  {acao: 'consulta', editid: id},

由于您的 id 来自 href,如果它自动转义会更好。

另外,不要这样:

echo 'Error querying';

类似:

echo json_encode(array('Error querying'));

所以它不会给出 JSON 解析错误(返回为 javascript 错误数组)。

另外,请确保您的 mod6_uploads 表有一个 nome 字段。

我发现其余的都很好。

干杯

PS:我建议你使用开发工具进行调试。一个非常简单的是 chrome,只需按 F12,单击网络选项卡,然后运行您的 ajax 请求。

【讨论】:

    【解决方案2】:

    如果你使用dataType:'json'success 回调只会在服务器响应是有效的 JSON 时触发。 因此,如果触发了error 回调,则您的响应将“填充”额外的数据,从而使 JSON 无效。 在这种情况下,请尝试评论 dataType:'json' 并在您的 success 回调中写入:

    alert(carga)
    

    console.log(carga)
    

    这将输出服务器响应,您将能够看到它有什么问题。

    另外,如果您想使用 JSON,请尝试在该文件中的任何地方使用 JSON,并避免使用此类代码:

    echo 'Error querying';
    

    否则你可能会得到意想不到的结果

    【讨论】: