2012-10-30 38 views
3

我新的AJAX和正在學習使用Spring MVC使用它。我面臨同樣的問題。

在繼續我的工作實際實時性要求,我測試了與真正的基本讓我理解正確的東西全AJAX + Spring MVC中的jQuery +組合。

我有一個搜索框+「提交」按鈕,在頁面上。我使用$ .get發送硬編碼文本給Spring控制器。然後我從該控制器發送另一個文本回到回調函數,並嘗試使用'alert'框在回調函數中顯示返回的文本。這似乎並不奏效。

我看到回調函數被調用(因爲回調函數內的'alert'正在被觸發),所以我認爲控制權被轉移到控制器並回到回調方法,但我我無法弄清楚爲什麼從控制器返回的文本沒有顯示在回調方法的警報框中。不知道我在這裏丟失了什麼來捕獲回調方法中的返回值。

您對此響應和幫助是非常感謝。

謝謝。

HTML文本框和提交按鈕:

<div class = "searchcontactform"> 
     <form id = "searchcontactform" name="searchcontactform" method="GET"> 
     <input type = 'text' size='25' name = "searchlastname" id = "searchlastname" value='Enter Last Name to Search'/> 
     <input type = "submit" value="Find"> 
     </form> 
    </div> 

的JavaScript觸發上提交上述形式:

<script type="text/javascript" src="${pageContext.request.contextPath}/resources/scripts/jquery.min.js"></script> 
    <script type="text/javascript"> 

    $(document).ready(function() { 
    $('#searchcontactform').submit(function(){ 

     $.get("ContactList-JPA/search", {textsent : 'Hello Controller'},callback); 

     function callback(textreceived){ 
       alert('In Callback. Text Received is: '+textreceived); 
     }; 
    }); 
    }); 

控制器:

 @RequestMapping(value = "/search", method = RequestMethod.GET) 
     public @ResponseBody String searchcontact(@RequestParam(value="textsent") String textsent){ 
     return textsent; 
     } 

傑克遜依賴於POM。 XML:

  <dependency> 
     <groupId>org.codehaus.jackson</groupId> 
     <artifactId>jackson-mapper-asl</artifactId> 
     <version>1.7.1</version> 
    </dependency> 

註釋中的servlet-context.xml中和根context.xml的驅動:

<!-- Enables the Spring MVC @Controller programming model --> 
    <annotation-driven /> 

回答

3

首先,把return false在年底提交事件處理程序

$('#searchcontactform').submit(function(){ 

     $.get("ContactList-JPA/search", 
     { 
      textsent : 'Hello Controller' 
     }, 
     function(textreceived){ 
       alert('In Callback. Text Received is: '+textreceived); 
     }); 
     return false; 
    }); 

如果這不起作用嘗試使用谷歌瀏覽器,你可以調試JavaScript應用,將斷點回調內部,在$.get

+1

''返回false'可能會阻止默認提交行爲 – melanke

+1

這工作!添加'返回false';提交事件處理程序結束時的語句解決了我的問題!非常感謝您的回覆。這是非常讚賞。 –

0

嘗試傳遞數據返回給回調作爲參數:

$(document).ready(function() { 
    $('#searchcontactform').submit(function(){ 

     $.get("ContactList-JPA/search", {textsent : 'Hello Controller'}, 
      function(data){ 
       callback(data); 
     }); 

     function callback(textreceived){ 
      alert('In Callback. Text Received is: '+textreceived); 
     }; 
    }); 
}); 

你也可以設置您的回調函數作爲匿名函數來整理事情。

$(document).ready(function() { 
    $('#searchcontactform').submit(function(){ 

     $.get("ContactList-JPA/search", {textsent : 'Hello Controller'}, 
      function(data){ 
       alert('In Callback. Text Received is: '+data); 
     }); 
    }); 
}); 
+0

不,這不是一個問題 – melanke

+0

那麼哪裏回調方法收到textReceived的 –

+0

回調函數的值已經有一個參數 – melanke

1

我認爲,問題是,你正在返回String類型出於某種原因,轉換爲響應時春/傑克遜不喜歡。要解決這個問題,你應該做的是以下幾點:

@RequestMapping(value = "/search", method = RequestMethod.GET) 
public @ResponseBody List<String> searchcontact(@RequestParam(value="textsent") String textsent){ 
    return Arrays.asList(new String[] { textsent }); 
} 

這不是理想的,很煩人。我沒有真正考慮過爲什麼會發生這種情況,因爲當時我的解決方法對我來說很好。

更新:道歉我在這裏錯了,你並沒有假設返回將會是JSON,所以使控制器改變將沒有影響。

相關問題