2014-01-06 52 views
0

我在這裏新和jQuery開發,我有一個問題,爲什麼我不能使用數據類型:'json'$ .parseJSON處理查詢返回從PHPAJAX(jQuery)發送AJAX,PHP查詢和返回JSON和AJAX不明白與「dataType:'json'」

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" 

如果我評論具體的數據類型:「json」,它返回我以下警告:未定義

如果我改變警報「警報(carga.nome)」到「警報(負載)」,它返回我下面的:

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

而且,正如我剛纔所說,如果我使用$.ParseJSONJSON.parse沒有任何回報,或者錯誤或成功。

有沒有人遇到類似這樣的事情? 如果有人可以幫助我,我將非常感激!

+0

凡在你的PHP你設置了「名稱「屬性?或者你只是把它關閉 –

+2

你需要使用'dataType:「json」'***或***'$ .parseJSON',而不是兩者。確切地說,你在你的問題中寫的方式應該工作得很好。 –

+0

很可能在你的PHP中有其他的東西返回一個額外的字符,這反過來使你的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請求。

0

如果您使用dataType:'json',success回調將只在服務器響應是有效的JSON時觸發。 因此,如果error回調觸發,您的響應是'填充'額外的數據,使JSON無效。 在這種情況下試評dataType:'json'並在success回調寫:

alert(carga) 

console.log(carga) 

這將輸出的服務器響應,你將能夠看到有什麼不妥的地方。

另外,如果你deside使用JSON,試圖在該文件中到處使用JSON並避免這樣的代碼:

echo 'Error querying'; 

否則,你可能會得到意想不到的結果