发送AJAX,PHP查询并返回JSON和AJAX不理解" dataType:' json'"

时间:2014-01-06 20:37:42

标签: javascript php jquery ajax json

我是新手和jQuery开发,我有一个问题,为什么我不能使用 dataType:'json' $。parseJSON 来处理退货查询从 PHP AJAX(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”,它会返回以下警告:undefined

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

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

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

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

2 个答案:

答案 0 :(得分: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请求。

答案 1 :(得分:0)

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

alert(carga)

console.log(carga)

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

此外,如果您希望使用JSON,请尝试在该文件中的任何位置使用JSON,并避免使用此类代码:

echo 'Error querying';

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