4

カテゴリ管理用の単一ページスクリプト、つまりcategory.phpを開発しています。

  1. このスクリプトには、AJAX呼び出しを呼び出すための入力ボタンがあります。
<input type="button" id="btn" />
  1. クリックイベントをバインドしてajaxを呼び出すJqueryコード。jsonの応答が必要です。

    $(document).ready(function(e) {
    $('#btn').click(function(e) {
            id=1;
            jQuery.ajax({
            type: 'post',
            url: 'category.php',
            success: function(data) {
                if(data.rstatus==1){
                alert(data.text);   
            }else
            alert(data);
        },
            data:{'id':id}
    
    
        }); 
        }); 
    });
    
  2. AJAX呼び出しを楽しませるphpコード。

    if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) &&
      strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
        $jsonResponse=array('rstatus'=>1,'id'=>$_POST['id']);
        header("Content-type: application/json");   
        json_encode($jsonResponse);
        die(); 
     }
    

問題:

このajax呼び出しは、コールバック関数で正しい応答を生成できず、firebugコンソールでエラーが発生します。TypeError:データがnullです

FIREBUGのヘッダーは次のとおりです。

Response Headers

> Cache-Control no-cache, must-revalidate Connection    Keep-Alive
> Content-Length    0 Content-Type  application/json Date   Tue, 26 Mar 2013
> 12:45:52 GMT Expires  Mon, 26 Jul 1997 05:00:00 GMT
> Keep-Alive    timeout=5, max=98 Last-Modified Tue, 26 Mar 2013
> 12:45:52GMT Pragma    no-cache Server Apache/2.4.3 (Win32) OpenSSL/1.0.1c
> PHP/5.4.7 X-Powered-By    PHP/5.4.7

Request Headers

> > Accept  */* Accept-Encoding gzip, deflate
>     > Accept-Language en-US,en;q=0.5 Content-Length   4
>     > Content-Type    application/x-www-form-urlencoded; charset=UTF-8
>     > Cookie  __gads=ID=39701a3d85dce702:T=1350383638:S=ALNI_MY_rHGVQ-qNxH4UGmbY_G-IuVcDkA;
>     > __utma=141011373.593047819.1350426838.1364292528.1364295112.314;PHPSESSID=1s73cho6ildjt80jtudt8nq0f5 Host   abc.com Referer http://www.abc.com/category.php
>     > User-Agent  Mozilla/5.0 (Windows NT 5.1; rv:19.0) Gecko/20100101
>     > Firefox/19.0 X-Requested-With   XMLHttpRequest
4

3 に答える 3

8

応答コンテンツが空のようです。あなたはを忘れましたecho

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    $jsonResponse=array('rstatus'=>1,'id'=>$_POST['id']);
    header("Content-type: application/json"); 
    echo json_encode($jsonResponse); 
    die(); 
}

jsonに応答する場合は、応答コンテンツに含める必要があります。PHPではecho、応答コンテンツに何かを入れるために使用する必要があります。

于 2013-03-26T13:05:21.600 に答える
0

これは$_SERVER、その情報が含まれていないという理由だけでは機能しません。すべてのリクエストヘッダーが実際にそこに保存されているわけではありません。ご覧くださいgetallheadershttp://php.net/manual/en/function.getallheaders.php

編集:ああ、またあなたは応答をエコーする必要があります。$ _SERVERには、この場合に必要な情報が含まれている可能性がありますが、信頼性と移植性はありません。それでもgetallheadersを使用することをお勧めします

于 2013-03-26T13:07:05.297 に答える
0

HTTP_X_REQUESTED_WITHを使用しないでください-jQueryではほとんど機能しません

data:{'id':id、'request':'xmlhttprequest'}

于 2013-03-26T13:29:02.457 に答える