2012-06-19 134 views
0

我正在jQuery中運行此getJSON異步調用,以便將數據返回到Java代碼中,然後從中移出。無論出於何種原因,我不斷得到錯誤:運行jQuery getJSON時發生Ajax錯誤

"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 + ')'); 
       } 
      }); 
} 
+3

[Stack Overflow是不是一個調試服務] (http://meta.stackexchange.com/a/135066/173320)您應該嘗試調試代碼,找到問題的位置,然後提出具體問題。 – gdoron

+1

難道可能是因爲你有'getJSON'而不是'$ .getJSON'? –

+1

getJson是什麼? – jbabey

回答

1

看來,從服務器響應的內容不是JSON格式。因爲您將$ .ajax的響應類型指定爲json,所以您需要將對象結果轉換爲json。您可以使用谷歌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; 
+0

這工作的第一次,但第二次我試着運行它的控制檯輸出'JSON爲空'在'如果(json.successful)' – PseudoPsyche

+0

啊,沒關係!我重新啓動了我的JBoss服務器,它一切正常!謝謝!這也很方便,因爲我已經在這個應用程序的其他地方使用Gson,所以這些庫已經在那裏。 – PseudoPsyche

+0

我找不到解釋它的原因。但顯然你應該在服務器上返回一個json格式的字符串,如果你使用這樣的javascript。 – guanxiaohua2k6

0

響應不縫合是有效的!

我檢查了它,你有一個無效的標籤有Ljava.lang.String; @ 1e40c9f,解析您的代碼時,我得到的錯誤是:

SyntaxError: invalid label