【问题标题】:SyntaxError: missing ; before statement in JSON语法错误:缺少; JSON 中的 before 语句
【发布时间】:2014-03-08 09:50:45
【问题描述】:

我收到一个非常奇怪的错误,但响应正确,我可以看到 JSON 内容:

这是请求:

$.ajax({
                    type: "GET",
                    url: urlTwitter,
                    contentType: "application/json",
                    dataType: "jsonp",
                    async: false,
                    success: function (resp, status, xhr) {
                       $("#message").html("STATUS: " + xhr.status + " " + xhr.statusText + "\n" + resp);
                       $("#message").hide();
                       $.each(resp, function() {
                            $.each(this, function(i, tweet) {
                                arrayTweets.push(tweet);
                            });

                        });

                        displayTweets();
                    },
                    error: function(resp, status, xhr){
                        $("#message").html("ERROR: " + xhr.status + " " + xhr.statusText + "\n" + resp.e);
                        $("#message").show();
                    }
                });

这是回复中的内容:

{"tweet":[{"text":"RT @OSCARHAROTASEND: MUYYY CONTENTO Y MUYYY ORGULLOSO del trabajo d mi hermanito @pablonieto22 en la presentación d su TEAM @CalvoTeam anoc…","user":"Jemurillove"}]}

谁有头绪,我这半天都在打。

感谢任何帮助。

谢谢,

编辑:

这是我的资源,如果它可以提供帮助。并且 Tweet 对象用@XmlRootElement注解:

@GET
    @XmlElement(name = "tweet")
    @Path("/retrieveTweets")
    @Produces(MediaType.APPLICATION_JSON)
    public List<Tweet> retrieve(@QueryParam("lat") Double Latitude, @QueryParam("lon") Double Longitude, @QueryParam("rad") Double Radius, @QueryParam("from") String From, @QueryParam("to") String To) {
        //List<Status> tweets = null;
        List<Tweet> lTweets = new ArrayList<Tweet>();
        boolean status = false;

        Twitter twitter = new TwitterFactory().getInstance();

        AccessToken accessToken = new AccessToken(TwitterInterface.ACCESS_TOKEN, TwitterInterface.ACCESS_TOKEN_SECRET);
        twitter.setOAuthConsumer(TwitterInterface.CONSUMER_KEY, TwitterInterface.CONSUMER_SECRET);
        twitter.setOAuthAccessToken(accessToken);

        try {
            Query query = new Query("");
            GeoLocation geo =  new GeoLocation(Latitude, Longitude);
            query.setGeoCode(geo, Radius/1000, Query.KILOMETERS);
            query.setCount(100);
            query.setSince(From);
            query.setUntil(To);
            QueryResult result;
            result = twitter.search(query);
            List<Status>tweets = result.getTweets();
            for (Status tweet : tweets) {
                System.out.println("@" + tweet.getUser().getScreenName() + " - " + tweet.getText() + " - " + tweet.getCreatedAt());
                Tweet t = new Tweet();
                t.setUser(tweet.getUser().getScreenName());
                t.setText(tweet.getText());
                lTweets.add(t);
            }
        }
        catch (TwitterException te) {
            te.printStackTrace();
            System.out.println("Failed to search tweets: " + te.getMessage());
            System.exit(-1);
        }

        return lTweets;

【问题讨论】:

  • 你在页面中使用&lt;meta http-equiv="content-type" content="text/html; charset=UTF-8" /&gt;吗?
  • @anurupr 不,我不是。
  • 您发布的响应明确表示,该请求不会作为 JSONP 运行,因为我们看不到回调中包含的数据。我看到你分配了 async: false,但是 JSONP 请求不能是同步的。尝试删除此行并检查响应。应该是callback323123123123({ /* data here */ })
  • 编辑后我看到您使用自己的代理,而不是直接 twitter API 调用。在这种情况下,您需要做出与 JSONP 兼容的响应。请参阅@knolleary 答案。
  • @Tommi 删除异步给出了相同的结果。

标签: javascript jquery json rest


【解决方案1】:

您正在请求 jsonp 响应,但响应是纯 JSON。

您可以将请求类型更改为“JSON” - 如果请求不违反跨域限制,或者更改生成响应的任何内容以将响应包装为 JSONP。

有关 JSONP 的更多信息,请查看jQuery docs

总之,jQuery 会自动在它请求的 url 中添加一个callback=? 参数。您的服务器端代码需要使用该参数的值作为 javascript 函数的名称,您的响应应该使用作为参数传递的 JSON 调用。

例如,如果callback=helloWorld,您的回复应该是:

helloWorld({"tweet": ... });

【讨论】:

  • 我检查了,谢谢,但我并没有真正看到如何将我的 JSON 包装在 JSONP 中?
  • 我也编辑了我的 qquestion 并向您展示了资源。
  • 此时的问题不再是 JSON/JavaScript,而是如何从带注释的 Java 服务器端响应生成 JSONP ......我帮不了你。
  • 鉴于我们已经“解决”了原始问题,请考虑接受其他搜索此错误消息的人的答案。
  • 我不熟悉 Java,但this 看起来很简单。
猜你喜欢
  • 2020-12-20
  • 1970-01-01
  • 1970-01-01
  • 2013-07-15
  • 1970-01-01
  • 2017-10-19
  • 1970-01-01
  • 2014-08-13
  • 1970-01-01
相关资源
最近更新 更多