当前位置: 首页 > 知识库问答 >
问题:

发送AJAX、PHP查询并返回JSON,AJAX不理解“dataType:'JSON”

宗穆冉
2023-03-14

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

读者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;
});
});

控制器。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"

如果我注释数据类型:“json”,它将返回以下警告:未定义

如果我将警报更改为警报(carga.nome)到警报(加载),它会返回以下内容:

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

另外,正如我前面所说的,如果我使用$。ParseJSON或JSON. parse没有任何返回,或错误或成功。

有人遇到过这样的事情吗?如果有人能帮助我,我将非常感激!

共有2个答案

晏阳飙
2023-03-14

如果使用dataType:'json'success回调将仅在服务器响应是有效的json时触发。因此,如果触发了error回调,您的响应将“填充”额外的数据,从而使JSON无效。在这种情况下,尝试注释数据类型:'json',并在成功回调中写入:

alert(carga)

console.log(carga)

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

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

echo 'Error querying';

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

华景焕
2023-03-14

我想换一行:

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请求。

 类似资料:
  • 问题内容: 我知道可以将AJAX请求发送到页面。而且我还知道页面通过Web方法处理AJAX请求。 是否还可以将AJAX请求发送到页面?如果是这样,页面是否还通过Web方法处理AJAX请求?请注意,我想从页面返回JSON响应。这可能吗? 问题答案: 您可以在页面的代码后面定义Web方法,然后调用它们: 然后,在您的jQuery代码中调用Web方法: 这是一个很好的入门指南。

  • 问题内容: 我仍然在努力摆脱JQUERY,AJAX和PHP的束缚。 我现在可以调用PHP OK,处理表单元素并发送电子邮件,但是我不处理返回AJAX的问题。我总是激活选择器,当我尝试列出返回的JSON时,我得到了信息,这显然是错误的。 PHP具有假定的JSON返回 Javascript和AJAX 假定的JSON数据清单 如果有人能建议我犯了什么愚蠢的错误,那么我将不胜感激。 问题答案: 您可以通过

  • 问题内容: 我想以json格式向php发送一些数据,并在php中进行一些操作。我的问题是我无法通过Ajax将json数据发送到我的php文件。请帮助我该怎么做。我已经尝试过这种方式.. 在PHP中,我使用: 在php文件中添加print_r($ _ POST)时,它在firebug中显示array(0){}。 问题答案: 输了。您没有将JSON发送到服务器,而是发送了普通的POST查询(恰好包含J

  • 问题内容: 有人可以简单地说明如何使jQuery发送实际的JSON而不是查询字符串吗? 实际上,这会将您精心准备的JSON转换为查询字符串。令人讨厌的事情之一是,对象中的任何内容都将转换为,这可能是由于查询字符串的限制所致。 问题答案: 您需要使用,首先将您的对象序列化为JSON,然后指定,以便您的服务器理解为JSON。这应该可以解决问题: 请注意,该对象在支持JavaScript 1.7 / E

  • 问题内容: 我正在尝试使用以下方法将json数据从客户端发送到我的服务器: 我得到一个。但是,当我使用json对象时会被发送。 它仅对PATCH不起作用 后端是Django,即时通讯使用的应用程序是tastypie 问题答案: 首先,检查您是否使用了最新版本的jQuery库: 旧版本直接限制未知方法(PATCH是新方法)。 我已经在jQuery 1.7上进行过测试-PATCH方法可以正常工作。 其

  • 问题内容: 我是AJAX的新手,并且对PHP传递回jQuery感到困惑。因此,您具有如下的AJAX函数: (我从ajax的另一个StackOverflow页面上获得了此信息。) 但是在其他各种资源上,他们将拥有成功部分,如下所示: 我只是困惑于是什么决定了这个变量的命名?如果PHP最终回显了一个数组: 我如何从AJAX获得此信息? 问题答案: Ajax- Requests获取整个站点。因此,您不会