2016-02-22 104 views
1

我想從我的javascript發送數據到我的struts動作。它只是一個id,因此我想知道是否有更好的方法,而不是通過form.submit();發送jQuery數據到struts動作

這裏是我想發送的變量。

var id = $('[data-detailsid="' + $(this).data('headid') + '"]'); 

什麼是正確的方法來做到這一點?

我現在的js函數:

$.ajax({ 
    url: "deleteProduct", 
    type: 'POST', 
    data: 'productId=' + id 
}); 

我的支柱作用:

@Action("/deleteProduct") 
@ResultPath("/") 
@Result(name = "success", location = "jsp/board.jsp") 
public class DeleteAction { 

    int productId; 

    @Autowired 
    private UserDao userDao; 


    public String execute() { 
     Product currentProduct = new Product(); 
     currentProduct.setId(productId); 
     userDao.deleteProduct(currentProduct); 
     setProducts(userDao.getProducts()); 
     return "success"; 
    } 

    public void setProductId(int productId) { 
     this.productId = productId; 
     } 
} 
+0

使用'$ .ajax' @charlietfl我試圖讓AJAX工作將數據發送到服務器 – charlietfl

+0

由於獲得成功的回調函數的結果,但我不非常習慣它。介意看看我做了什麼?我編輯了我的帖子。我想讓我的productId在我的動作中被設置爲我的javascript中的id變量。 –

+1

基礎在'$ .ajax'中是正確的。使用成功和錯誤處理程序進行確認。我不知道任何關於struts的內容......只要將ajax數據視爲表單提交'',並加上'name =「productId' – charlietfl

回答

2

如果要調用通過Ajax的動作,沒有必要返回dispatcher結果。如果您在classpash上有json插件並且該操作的註釋爲@ParentPackage("json-default"),則可以返回結果類型json。您可以使用root參數指向json結果,以在執行結果時定義要序列化的對象。默認情況下,root被設置爲動作實例,所以所有的屬性都被序列化。如果你想限制/允許json序列化的一些屬性,你可以使用結果excludePropertiesincludeProperties的參數。這兩個參數是互斥的。

@Result(type="json", params = {"includeProperties", "productId" }) 

它會返回productId回到頁面,如果它被填充到行動豆和動作類有一個getter方法。

可以使用

$.ajax({ 
    url: "deleteProduct", 
    type: 'POST', 
    data: 'productId=' + id, 
    dataType: "json" 
}).done(function(data){ 
    console.log("The product id:" + data.productId); 
}).fail(function(jqXHR, textStatus) { 
    alert("Request failed: " + textStatus); 
}); 
+0

太棒了,非常感謝羅馬 –