JavaScript возвращает ошибку "не является функцией", но метод указан в ответе в Firebug

Я получаю следующую ошибку в 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, но я получаю ответ "это не функция". Я в недоумении относительно того, почему это происходит.

Какие-нибудь мысли?

РЕДАКТИРОВАТЬ -> 26.04.2012 @ 16:25 EDT

Хотя функция processBrowser() СУЩЕСТВУЕТ, она является частью класса Browser, определенного в Browser.php, но вызов jQuery.Zend.jsonrpc({url: /json-rpc.php'}), очевидно, не получает надлежащего ответ. Я до сих пор не знаю, почему.

2 ответа

Решение

У меня та же проблема. Попробуйте убрать строку "header('Content-Type: application/json');". У меня это сработало:)

Я взял 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", "необязательный": false}], "return": "string"}}, "Methods": {"processBrowser": {"envelope": "JSON-RPC-2.0", "transport": "POST "," параметры ": [{" тип ":" объект "," имя ":" json "," необязательно ": false}]," возвращает ":" строка "}} {" ошибка ": {" код ": -32600, "message": "Недопустимый запрос", "data": null }, "id": null } };

Другие вопросы по тегам