2010-09-11 107 views
0

我想調試一個簡單的PHP/JSON/jQuery問題。來自PHP腳本被包含在JSON響應<head></head><body> ... <body>

下面的PHP腳本:

header('Content-type: text/javascript'); 
echo json_encode(array('type'=>'error','message'=>'arg')); 

是由jQuery的消耗,但線的時候:

var results = jQuery.parseJSON(responseText); 

執行,jQuery的JSON解析器給出了以下幾點:

uncaught exception: Invalid JSON: <head></head><body><pre>{"type":"error","message":"oops!"}</pre></body> 

顯然頭/身體/前不應該被退回。

我看不出有任何的隱藏字符什麼也不亂序在我的PHP代碼..

任何想法?

+0

使用FireBug進行查看時,這是從服務器發送的確切響應嗎?您託管此腳本的服務器可以附加這些HTML標記嗎? – 2010-09-11 10:02:45

+0

你使用任何PHP框架嗎? – 2010-09-11 11:41:45

+0

達林 - 我不得不再次檢查 - 我會做一個小PHP腳本,看看會發生什麼。留意一下更新。 Felix - 不,我不是,主要是因爲這個應用程序實際上是一個單頁設置來解決我和我的同事的問題。我一直頑皮,甚至保持它非OOP,因爲它應該是一個簡單的問題。 – 2010-09-12 06:53:39

回答

0

儘量不要送header('Content-type: text/javascript');

+0

謝謝Sanek,將仔細檢查,可能需要改變我的Apache的MIME設置有點 – 2010-09-12 06:51:57

+0

好吧,我已經嘗試過,但我得到的是Firefox要求打開或保存的PHP頁面... – 2010-09-12 07:19:27

0

json for php發現 「function send_as_json($obj)

headers types

+0

謝謝安德烈斯,將看看那一個 – 2010-09-12 06:51:00

0

將頭應用程序/ JSON。

+0

感謝保羅,將仔細檢查...可能需要改變我的apache MIME設置一點點 – 2010-09-12 06:50:39

1

這一個讓我在過去兩天中難倒了。我正在使用jQuery Form插件的ajaxSubmit函數通過AJAX提交表單,而無需重新加載頁面。在this question顯示給我一個我以前沒有注意到的參數後,我終於偶然發現了答案:dataType。

在幕後,正在創建一個iframe,並且實際上正在將該回調調回服務器。來自服務器的響應正在從iframe中提取,這會帶來標籤。

jQuery表單插件通過允許您指定服務器期望的響應類型來處理這種情況。如果我指定「JSON」作爲響應類型,代碼如下幾行執行從標籤中獲取JSON:

// account for browsers injecting pre around json response 
var pre = doc.getElementsByTagName('pre')[0]; 
if (pre) { 
    xhr.responseText = pre.innerHTML; 
} 

(DOC是iframe的文檔的引用和XHR是XmlHttpResponse對象最終從插件的函數返回。)

我不知道你是如何使你的AJAX調用,但我猜一個類似的構造(也許使用文檔片段)將允許您提取響應中必要的JSON。

相關問題