【问题标题】:Ajax error when running jQuery getJSON运行 jQuery getJSON 时出现 Ajax 错误
【发布时间】:2012-06-19 13:41:47
【问题描述】:

我正在 jQuery 中运行这个 getJSON 异步调用,以将数据取回并从我的 Java 代码中取出。无论出于何种原因,我不断收到错误:

"Ajax Error: Error invoking generateSearchQuery([object Object])"

我已经调试了 jQuery 和 Java 代码。 Java 代码接收 JSON 数据,对其进行处理,然后毫无问题地将其写回。 jQuery 代码在进入内部 getJson 方法并尝试 if(json.successful) 时将错误踢出。

回复是:{"error":{"message":"","title":"Error Generating Search Query"},"data":[Ljava.lang.String;@1e40c9f,"successful":"successful"}

我已经处理这个异步调用几天了,但仍然无法让它工作。有什么想法吗?

jQuery 函数:

generate : function(){

    getJson(
        Search.guid,
        "generateSearchQuery",
        {
            "data": [
                "val0",
                "val1",
                "val2",
                "val3",
                "val4"
            ]
        }, function(json) {
            Search.data = $.parseJSON(json.data);

            $.each(Search.data, function(k, v){
                $('#searchQuery').append(v + "\n");
            });
        });
},

Java 函数:

    @AsyncService(name = "generateSearchQuery", permission = "")
    public void generateSearchQuery(HttpServletRequest req, HttpServletResponse res) {
        res.setHeader("Cache-Control", "no-cache");
        JSONResult result = new JSONResult("Error Generating Search Query");

        String[] arr = req.getParameterValues("data[]");

        for(int i = 0; i< arr.length; i++){
            arr[i] = "success"+i+"!";
        }

        result.put("data", arr);

        try {
            res.getWriter().print(result);
        } catch (IOException e) {
            // whatever
        }
    }
}

getJson:

function getJson(guid, service, parms, callback) {
    beginWork();
    $
            .ajax( {
                url : document.URL,
                type : 'GET',
                data : parms,
                cache : 'false',
                dataType : 'json',
                headers : {
                    'framework-guid' : guid,
                    'async-service' : service
                },
                success : function(json) {
                    endWork();
                    if (json.successful) {
                        callback(json);
                    } else {
                        error(json.error && json.error.title ? json.error.title
                                : 'No Title Provided', json.error
                                && json.error.message ? json.error.message
                                : 'No message provided for service ' + service);
                    }
                },
                error : function(jqXHR, textStatus, errorThrown) {
                    endWork();
                    error('Ajax Error', 'Error invoking ' + service + '('
                            + parms + ')');
                }
            });
}

【问题讨论】:

  • Stack Overflow is not a debugging service你应该尝试调试代码,然后找到问题所在,提出具体问题。
  • 可能是因为你有getJSON 而不是$.getJSON
  • 什么是getJson?那是$.getJSON 的包装吗? $.getJSON 只需要 3 个参数,它还会为你解析 JSON(不需要$.parseJSON)。
  • @gdoron,我一直在调试它。一切似乎都运行良好,直到它进入 jQuery 的 getJSON 方法进行检查:if (json.successful) { 然后抛出错误,然后运行我的 Java 代码,但没有将结果传递回 jQuery 端。
  • 响应是什么样的。把它放在页面上。使用 Fiddler 之类的工具来获取响应。

标签: java javascript jquery json jsp


【解决方案1】:

似乎服务器响应的内容不是 json 格式。因为你将$.ajax的响应类型指定为json,所以需要将object result转换为json。您可以使用 google gson http://code.google.com/p/google-gson/,并执行以下操作。

Gson gson = new Gson();
res.getWriter().print(gson.toJson(result));

而在 getJson 中,您应该进行以下更改。

//before
Search.data = $.parseJSON(json.data);
//after
Search.data = json.data;

【讨论】:

  • 这第一次成功,但第二次我尝试在控制台运行它,输出json is nullif(json.successful)
  • 啊,没关系!我重新启动了我的 JBoss 服务器,一切正常!谢谢!这也很方便,因为我已经在这个应用程序的其他地方使用了 Gson,所以库已经在那里了。
  • 找不到原因解释一下。但是很明显,如果你使用这样的javascript,你应该在服务器上返回一个json格式的字符串。
【解决方案2】:

响应似乎无效!

我检查了,你有一个无效的标签 Ljava.lang.String;@1e40c9f,我在解析你的代码时得到的错误是:

SyntaxError: invalid label

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 2013-02-25
    相关资源
    最近更新 更多