2013-08-05 94 views
0

我的代碼:json_encode JSON.parse意外標記<

function callback(request, prim_key) { 
    var type = request.getResponseHeader("Content-Type"); 
    if (type === "application/json") { 
     console.log(request.responseText); 
     var response = JSON.parse(request.responseText); 
     if (!response['success']) { 
      alert("Error!\n\nError number: " + response['errno'] + "\n\nError string: " + response['error']); 
     } 
     else { 
      alert("Update Successful!"); 
     } 
     var els = getElementsByClass(prim_key); 
     for (var i = 0; i < els.length; i++) { 
      if (els[i].type != 'checkbox') { 
       els[i].innerHTML = response[els[i].headers]; 
      } 
     } 
    } else { 
     alert("not a json reponse! check database for errors."); 
    } 
} 

當我打電話jason.parser,並給我下面的錯誤消息,它將停止:

Uncaught SyntaxError: Unexpected token < .

我盡力勸慰請求.responseText,並得到如下結果: update:實際上,我意識到request.responseText不僅包含我想要的數據,還包含了開頭的html文件,我認爲這是我的問題,但我不知道如何解決它。

{"success":true,"ID":"131","Manufacturing_ID":"88888","Sequence_Name":"NDU","Bases":"22","Sequence":"TGG AGA TGT GTG CGT TCT TCTGG AGA TGT GTG CGT TCT TCTGG AGA TGT GTG CGT TCT TC","Tm_C":"55.00000000","nmoles":"26.0","Owner":"Liang","Species":"gallus"}   

似乎沒有「<」在我的「resonseText'.any的想法,感謝

更新:其實,我知道request.responseText不只是包含下面我想要的數據,而且還含有在開始的HTML文件,我認爲這是我的問題,但我不知道如何解決它。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"................... 
{"success":true,"ID":"131","Manufacturing_ID":"88888","Sequence_Name":"NDU","Bases":"22","Sequence":"TGG AGA TGT GTG CGT TCT TCTGG AGA TGT GTG CGT TCT TCTGG AGA TGT GTG CGT TCT TC","Tm_C":"55.00000000","nmoles":"26.0","Owner":"Liang","Species":"gallus"} 

my php code:

$query = "SELECT * FROM $table WHERE "; 
$i = 0; 
foreach ($pks as $pk) { 
$query .= "$pk='$pvs[$i]' AND "; 
$i++; 
} 
$query = rtrim($query, " AND "); 
$result = $db_conn->query($query); 
$row = $result->fetch_assoc(); 

//$flag_key=''; 

if ($db_conn->errno) { 
    echo "oops"; 
    } else { 
    foreach ($row as $key => $value) { 
     $response[$key] = $value; 
    //$flag_key .=$key.'-'.$value.'***'; 
    } 
} 


header('Content-Type: application/json'); 
echo json_encode($response); 
+3

發佈JSON,但很可能它是一個javscript對象。您可以使用Chrome或Firefox的控制檯來設置斷點並查看JSON的情況。 – abc123

+3

對於abc123的評論,你確定你還沒有發回HTML嗎?如果它不能解析第一個字符 - 這將是HTML響應中的一個「<」,這將是有意義的。 (相當於在ASP.NET中發送PartialView或類似內容) – JasCav

+0

當您說「得到下面的結果:」我想你忘了複製結果,所以我們不知道它是什麼。 –

回答

0

一個可能的原因可能是你在php.ini啓用ob_start("ob_tidyhandler")。如果是,則註釋此行以禁用它。

ob_tidyhandler似乎是原因。如果您檢查修改後的緩衝區,它將返回,它與您發佈的結果的標題看起來完全相同。

希望這會有所幫助。

+0

在我的php.ini中沒有ob_start(「ob_tidyhandler」)。我應該在哪裏找到它?謝謝。 – LEON

+0

按照你的想法,我添加'ob_end_clean();'之前'頭和json_encode($請求)'在我的PHP文件,現在,它的工作。謝謝 – LEON