jQuery 1.5 - недопустимая метка ошибки JSON

Я получаю сообщение об ошибке недопустимой метки, теперь я обновил свой jQuery. Я читал, что новая версия 1.5 теперь более строга к кодировке JSON. Хотя я использую Zend_Json::encode(array("content"=>$result)); для кодирования HTML так бы думал, что это будет.

Я прочитал в руководстве, что он был обновлен, хотя не могу заставить его работать без ошибок синтаксического анализа. Руководство по jQuery JSON

Error: invalid label
Source File: http://domain.local/register/#
Line: 0, Column: 1
Source Code:
{"content":"<div id=\"captcha_captcha.json\">\r\n<div class=\"input\">\r\n\t<div class=\"text-small\"><input type=\"text\" size=\"12\" name=\"captcha.json[input]\" id=\"captcha_id\" \/><\/div> \r\n\t<img src=\"http:\/\/domain.local\/tmp\/captchas

Это мой код JavaScript.

function regenerateCaptcha<?php echo $params["name"]?>(){
    captcha_id = "captcha_<?php echo $params["name"]?>";

        $.getJSON("/default/captcha/regeneratecaptcha/name/<?php echo $params["name"]?>.json", function(data){
               success : pasteCaptcha<?php echo $params["name"]?>
        });
    } 

    function pasteCaptcha<?php echo $params["name"]?>(json){
        $("#captcha_<?php echo $params["name"]?> .input").replaceWith(json.content);
    }

И когда я просматриваю источник URL:

{"content":"<div id=\"captcha_captcha\">\r\n<div class=\"input\">\r\n\t<div class=\"text-small\"><input type=\"text\" size=\"12\" name=\"captcha[input]\" id=\"captcha_id\" \/><\/div> \r\n\t<img src=\"http:\/\/fantasyolympics.local\/tmp\/captchas\/6498c75d8e3f9b8ed2cbb7a066f962a6.png\" class=\"captcha\" width=\"185\" height=\"36\" \/>\r\n    <input type=\"hidden\" name=\"captcha[id]\" value=\"6498c75d8e3f9b8ed2cbb7a066f962a6\" \/>    \r\n    <a href=\"#\" onclick=\"regenerateCaptchacaptcha();return false;\" class=\"captcha_refresh\" title=\"Try a new code\"><\/a>\t\r\n<\/div>\r\n<\/div>\r\n<script type=\"text\/javascript\">\r\n\tfunction regenerateCaptchacaptcha(){\r\n\t\tcaptcha_id = \"captcha_captcha\";\r\n\r\n\t\t$.getJSON(\"\/default\/captcha\/regeneratecaptcha\/name\/captcha.json\", function(data){\r\n            success : pasteCaptchacaptcha\t    });\r\n\t} \r\n\t\r\n\tfunction pasteCaptchacaptcha(json){\r\n\t\t$(\"#captcha_captcha .input\").replaceWith(json.content);\r\n\t}\r\n<\/script>\r\n"}

person John Magnolia    schedule 22.03.2011    source источник
comment
Я не совсем уверен, в чем проблема, но заголовок stackoverflow.com/questions/1230897/ - это связанный с этим вопрос. Кроме того, поскольку вы передаете HTML-код в формате JSON вместо данных, вы также можете переключиться на обычный HTML и не сталкиваться с проблемами кодирования.   -  person Daff    schedule 22.03.2011


Ответы (2)


Я только что решил похожую проблему.

Причина, по которой jQuery выдает ошибку недопустимой метки, заключается в том, что он ожидает, что сервисы ответят в формате JSONP, а не в формате JSON. Если ваша служба отвечает в формате JSON, вы получите это сообщение об ошибке.

Обходной путь для этого — сделать асинхронный вызов вашей службы, а затем проанализировать результат с помощью jQuery.parseJSON. Чтобы вызвать службу, которая отвечает в формате JSON, ваш код должен выглядеть примерно так:

    function createRequest() {
       try { return new XMLHttpRequest(); } catch(e) {}
       try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
       alert("XMLHttpRequest not supported");
       return null;
     }

    var request = createRequest();
    request.open(“GET”, HTTP://URL.of.service.to.call, true);
    request.onreadystatechange = callback;
    request.send(null);

   function callback() {
        if(request.readyState != 4) { return }
        ObjectYouWant = $.parseJSON(request.responseText);
    }

Я получил это решение, работающее в моем приложении, адаптировав код, найденный на AjaxPatterns.org, и jQuery.com

person Delta Squared    schedule 23.03.2011

Была эта проблема, когда я обновил jquery с нескольких версий назад.

Я использовал плагин формы jquery, поэтому у меня не было прямого контроля над декодированием строки json.

Я обнаружил, что эта проблема связана с jquery 1.5, вместо этого использовал 1.4.4 (и v2.73 плагина формы), и все прошло нормально.

person Dave    schedule 05.05.2011