2011-01-25 9 views
6

私は、Jquery AJAX呼び出しにJSONを返すPHPページを作成しようとしています。問題は、コンテンツタイプをapplication/jsonに設定しているにもかかわらず、応答には常にHTMLヘッダーが含まれているようです。ここでPHP JSONレスポンスにHTMLヘッダーが含まれています

は、PHPのコードは次のとおりです。JavaScriptでは次に

// some code that generates an array 
header("Content-type: application/json"); 
echo json_encode($return); 

$.ajax({ 
     url: '/VAPHP/services/datatable.php', 
     dataType: 'json', 
     data: 
      { 
       type: 'invoices' 
      }, 
     success: function(data) 
     { 
      // show a message saying it's been sent! 
      alert('Success!'); 
     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown) { 
      alert('Error!'); 
     } 


    }); 

応答は、常にこのようなもののようだ:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> 
<html> 
<head> 
<title></title> 
</head> 
<body> 
{"aaData":[["2007-08-01","91109507","Invoice","10.000000","AUD"],["2007-08-02","91110103","Invoice","5.000000","AUD"],["2007-08-02","91110122","Invoice","305.000000","AUD"],["2007-08-02","91110129","Invoice","320.000000","AUD"],["2007-08-03","91111146","Credit 
for Returns","10.000000","AUD"],["2007-08-06","91111895","Credit 
for Returns","320.000000","AUD"],["2007-09-03","91128486","Credit 
Memo","5.000000","AUD"],["2007-09-03","91128487","Credit 
etc, etc 

と応答ヘッダーに応じてそれは確かにそれがJSONだと思う:

HTTP/1.1 200 OK 
Content-Type: application/json 
Server: Microsoft-IIS/7.5 
X-Powered-By: PHP/5.3.3 

コードを実行すると、「エラー!」という警告が表示されます。毎回解雇されますが、これは理解できるものです... HTMLが応答に含まれている理由は何ですか?

+2

どのように応答を調べますか? –

+4

おそらくあなたのアプリケーションはそれを他のところで行い、出力バッファリングが有効になっているので、 'ヘッダは既に送信されました'というエラーは表示されません。 – Mchl

+1

フレームワークを使用していますか、それともスタンドアロンのPHPファイルですか? –

答えて

2

私は自分の答えを見つけました。私はPHP内でtidyhtmlをオンにしたようです。iniファイルにあり、

ob_start("ob_tidyhandler"); 

が私のグローバルパッケージに含まれていました。それをコメントし、それはすべて正常に動作します。みなさんのお時間をありがとう!

0

「ヘッダー(...)」部分全体をコメントしてみましたか?それはそれなしで動作するはずです。 AJAX呼び出しは、PHPプログラムの出力(ヘッダを含む)のすべてを取得します。

+0

このヘッダ:HTTP/1.1 200 OK Content-Length:3464 コンテンツタイプ:text/html サーバ:Microsoft-IIS/7.5 X-Powered-By:PHP/5.3.3 – hellboy1975

+0

Firebugが、サーバーからHTMLヘッダーがあります。これはPHPファイル全体です.HTMLヘッダーを生成する2つの関数の1つです。あなたはサーバー側で静的な模擬JSONファイルを試しましたか?どこのデータが送信されるのですか? – Marcus

+0

それを無視してください - 夜遅くコードしてはいけません! – hellboy1975

0

PHPコードベースのすべての応答に対して、HTML DTDと頭部が自動的に表示されていると感じています。フレームワークを使用していますか?もしそうなら、どちらですか? json.txtが動作するという事実は、js、ブラウザ、またはそれらの間のプロキシが間違っていることを示しています。

PHPコードフローをデバッグして、この部分がhtml応答に追加される場所を確認することをお勧めします。

5

header()を呼び出すと、実際には応答にHTMLコードが返されます。 HTMLコード(<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">)はHTTP応答の本体で送信されている。

header()は、HTTP-ヘッダを設定するために使用されレスポンスが正しいコンテンツタイプが含まれているため

だからコード

header("Content-type: application/json"); 

のラインが正確に彼の仕事をしていません:

Content-Type: application/json 

をだから何が悪いですの?おそらく、の前に実行されたコードがあります。 jsonを処理するコードです。 HTMLタグを使用せずにレスポンスにjsonエンコードされたメッセージのみを送信し、exitまたはdieを使用してスクリプトを終了する必要があります。 HTMLタグを送信するコードを探して、のコードをの前に置きます。

+0

PHPファイルのコードに書き込む方法は? – Gank

+0

これは私のPHPファイルで間違っていたものです。私はjsonデータを返信する最初のPHPスクリプトの前にdoctypeタグを持っていました。すべてのhtmlタグをphpスクリプトの下に置いて、データを送信するのか、htmlのベローを出力するのかを決定してください。 – OzzyTheGiant

0

あなたがする前に、おそらく何かが投稿されているヘッダーがあります。このためにphpコードをもっと提供できますか?phpタグの外にある1つの空白は、ヘッダー(デフォルトではhttp)の出力を強制します。

関連する問題