【问题标题】:jQuery 1.5 - JSON error invalid labeljQuery 1.5 - JSON 错误标签无效
【发布时间】:2011-03-22 17:09:35
【问题描述】:

现在我已经升级了我的 jQuery,我收到了无效标签错误。我读到新的 1.5 版本现在对 JSON 编码更加严格。虽然我使用 Zend_Json::encode(array("content"=>$result));对 HTML 进行编码,所以我想这会。

我在手册中读到它已被更新,尽管在没有解析错误的情况下无法使其正常工作。 jQuery JSON Manual

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"}

【问题讨论】:

  • 我不完全确定问题出在哪里,但stackoverflow.com/questions/1230897/… 是一个相关问题。此外,由于您传输的是 JSON 编码的 HTML 而不是数据,您也可以切换到纯 HTML 而不会遇到编码问题。

标签: jquery json zend-framework jsonp jquery-1.5


【解决方案1】:

我刚刚解决了一个类似的问题。

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.orgjQuery.com 上的代码,让这个解决方案在我的应用程序中运行

【讨论】:

    【解决方案2】:

    当我从几个版本升级 jquery 时遇到了这个问题。

    我使用的是 jquery 表单插件,所以我无法直接控制解码 json 字符串。

    我发现这个问题与 jquery 1.5 相关,改用 1.4.4(和表单插件的 v2.73),结果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-01
      • 2013-01-12
      相关资源
      最近更新 更多