2

Webページをロードすると、Firebugで次のエラーが発生します。

redirect.processBrowser is not a function
[Break On This Error]   
url = redirect.processBrowser(JSON.stringify(browserInfo));

Firebugで見られる応答は次のとおりです。

{"transport":"POST","envelope":"JSON-RPC-2.0","contentType":"application\/json","SMDVersion":"2.0","target":"\/json-rpc.php","services":{"processBrowser":{"envelope":"JSON-RPC-2.0","transport":"POST","parameters":[{"type":"object","name":"json","optional":false}],"returns":"string"}},"methods":{"processBrowser":{"envelope":"JSON-RPC-2.0","transport":"POST","parameters":[{"type":"object","name":"json","optional":false}],"returns":"string"}}}{"error":{"code":-32600,"message":"Invalid Request","data":null},"id":null}

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

<script src="js/jquery-1.7.2.min.js" type="text/javascript"></script>
<script src="js/json2.js" type="text/javascript"></script>
<script src="js/jquery.zend.jsonrpc.js" type="text/javascript"></script>
<script src="js/browserDetect.js" type="text/javascript"></script>
<script type="text/javascript">
        $(document).ready(function()
        {
            browserInfo = {
                "screen_width": screen.width,
                "screen_height": screen.height,
                "color_depth": screen.colorDepth,
                "url": document.URL,
                "user_agent": navigator.userAgent,
                "browser_name": BrowserDetect.browser,
                "browser_version": BrowserDetect.version,
                "platform": BrowserDetect.OS
            };

            redirect = jQuery.Zend.jsonrpc({url: '/json-rpc.php'});

            url = redirect.processBrowser(JSON.stringify(browserInfo));

            window.location.replace(url);
        });
    </script>

jsonrpc.phpコードは次のとおりです。

<?php
// Define path to the application directory
defined('REFERRAL_SYSTEM_ROOT') || define('REFERRAL_SYSTEM_ROOT', realpath('/system'));
defined('REFERRAL_PUBLIC_ROOT') || define('REFERRAL_PUBLIC_ROOT', realpath('/public'));

require_once REFERRAL_SYSTEM_ROOT . '/some_file.php';

/**
 * Zend Application
 **/
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application($_ENV["REFERRAL_ENVIRONMENT"], REFERRAL_SYSTEM_ROOT . '/config/application.ini');

$application->getBootstrap();

require_once 'Browser.php';

// Instantiate server, etc.
$server = new Zend_Json_Server();
$server->setClass('Browser');

if('GET' == $_SERVER['REQUEST_METHOD'])
{
    // Indicate the URL endpoint, and the JSON-RPC version used:
    $server->setTarget('/jsonrpc.php')
           ->setEnvelope(Zend_Json_Server_Smd::ENV_JSONRPC_2);

    // Grab the SMD
    $smd = $server->getServiceMap();

    // Return the SMD to the client
    header('Content-Type: application/json');
    echo $smd;
}

$server->handle();

応答からわかるように、processBrowserはZEND_JSON_RPCサーバーによって認識されますが、「関数ではありません」という応答が返されます。なぜこれが起こっているのか私は途方に暮れています。

何かご意見は?

編集->2012年4月26日午後4時25分EDT

関数processBrowser()は存在しますが、 Browser.phpで定義されているBrowserクラスの一部であり、jQuery.Zend.jsonrpc({url:'/json-rpc.php'})の呼び出しは明らかに適切なものを受け取っていません。応答。理由はまだわかりません。

4

2 に答える 2

1

私はあなたが言ったjsonをfirebugコンソールから取り出してjsonlintしました。

結果は次のとおりです。35行目の解析エラー:... g "}}} {" error ":{
--------------------^'EOF'が必要です、'}'、'、'、']'

エラーセクションの前に、応答全体の閉じ括弧があります。何が応答を生成しているかはわかりませんが、そこから削除して最後に配置する必要があります。

これは修正されたjsonです:

{"transport": "POST"、 "envelope": "JSON-RPC-2.0"、 "contentType": "application / json"、 "SMDVersion": "2.0"、 "target": "/json-rpc.php "、" services ":{" processBrowser ":{" envelope ":" JSON-RPC-2.0 "、"transport ":" POST "、" parameters ":[{" type ":" object "、" name ": "json"、 "optional":false}]、 "returns": "string"}}、 "methods":{"processBrowser":{"envelope": "JSON-RPC-2.0"、 "transport": "POST "、"パラメータ ":[{"タイプ ":"オブジェクト "、"名前 ":" json "、"オプション ":false}]、"戻り値 ":"文字列 "}}{"エラー":{"コード":-32600、"メッセージ ":"無効なリクエスト "、"データ ":null}、" id ":null}};"data":null}、 "id":null}};"data":null}、 "id":null}};

于 2012-04-26T19:50:37.410 に答える
0

同じ問題が発生しています。行""を削除してみてくださいheader('Content-Type: application/json');。それは私のために働いた:)

于 2012-05-07T05:13:06.820 に答える