2009-08-09 122 views
4

我試圖發送一個表格使用$.ajaxjQuery的PHP。我把所有的東西都發送成JSON,但是當我嘗試得到響應時,我得到了'parsererror'。我究竟做錯了什麼?jQuery,Ajax,JSON,PHP和parsererror

jQuery的片段:

$("form").submit(function(){ 
    $.ajax({type: "POST", 
     url: "inscrever_curso.php", 
     data: {cpf : $("input#cpf").val(),nome : $("input#nome").val()}, 
     dataType: "json", 
     success: function(data){ 
      alert("sucesso: "+data.msg); 
     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown){ 
      alert ("erro: "+textStatus); 
     } 
    }); 
    return false; 
}); 

PHP:

<?php 
    $return[msg]="Testing, testing."; 
    echo json_encode($return); 
?> 
+0

感謝您的快速回復 - 我剛剛在PHP中添加了msg的引號,但仍然出現錯誤。 :( – 2009-08-09 21:51:42

+0

噢:-(你確定它是從服務器上得到的「解析錯誤」嗎?你的PHP腳本不能超過這兩行嗎?因爲那些看起來很好(至少沒有解析錯誤);你正在使用PHP > = 5.2,對吧? – 2009-08-09 21:54:32

+2

不應該以「不應該」爲開頭的答案是針對原始問題的評論,還是不要用盡答案空間? – 2009-08-09 21:54:45

回答

6

我不知道這是否是你的問題的原因,但這裏是一件事你的PHP代碼:

$return[msg]="Testing, testing."; 
echo json_encode($return); 

這樣做,用E_NOTICE error_reporting級別,您將獲得:

Notice: Use of undefined constant msg - assumed 'msg' 

如果在服務器上啓用並顯示通知,是否會導致無效的JSON輸出(輸出包含JSON字符串之前的錯誤消息)。


爲了避免這種情況的通知,則必須使用此語法:

$return['msg']="Testing, testing."; 
echo json_encode($return); 

注意周圍msg引號:正在創建的數組元素的鍵是一個字符串常量,因此,它被封閉在引號中。

如果不加這些引號,PHP會搜索一個名爲「msg」的常量,該常量可能不存在。

欲瞭解更多關於此信息,你可以看看手冊的這一部分:Why is $foo[bar] wrong?

(我不知道它會解決你的問題,但它是很好的瞭解呢。)

3

你的PHP代碼也許應該是:

<?php 
    $return = array(); 
    $return['msg']="Testing, testing."; 
    echo json_encode($return); 
?> 
1

我才發現發生了什麼事:我有一個.htaccess腳本友好的URL,它正在尋找正確的PHP文件,但在錯誤的目錄中。我剛剛在URL中的文件名之前添加了一個'/',然後它就起作用了。

+0

Ergh :-D不錯的工作:我們可能不會找到這一個^^感謝您告訴我們是什麼導致了問題! – 2009-08-09 22:16:59