2016-02-15 53 views
1

我想檢索多個ID這樣的數據:

(重簡化,但我希望我可以讓我的點晴)

控制器:

var idList = [39,40,41]; 
$.each(idList, function(key, value){ 
    var dataObject = { 
    type: "test", 
    id: value 
    }; 
    var getData = DataFactory.get(dataObject); 
    getData.then(function(result){ 
    console.log(result); 
    } 
}); 

廠:

app.factory("DataFactory", ['$http', '$rootScope', 
    function($http, $rootScope){ 
    url = 'http://url/api'; 
    var obj = {}; 
    obj.get = function(object){ 
     return $http({ 
     method: 'GET', 
     params: object, 
     url: url 
     }) 
     .then(function(results){ 
     return results.data; 
     }); 
    }; 
    return obj; 
    } 
]); 

後端:

<?php 
    $id = $_GET['id']; 
    $type = $_GET['type']; 

    echo json_encode(array("id": $id, "type": type, "value": "value matching id ".$id)); 
?> 

如果IDLIST爲1點的整數時,返回的數據相匹配的ID例如:

{id: 39, type: "test", value: "value matching id 39"} 

然而,在IDLIST施加多個值時,返回的數據不被施加到正確的ID:

{id: 39: type: "test", value: "value matching id 41"} 
{id: 40: type: "test", value: "value matching id 39"} 
{id: 41: type: "test", value: "value matching id 40"} 

我預計如果我發回相同的ID,與該ID匹配的值將是正確的。不是這種情況。有什麼方法可以將ID正確綁定到正確的匹配值嗎?

編輯: 綜觀鉻發生以下情況的網絡標籤:

對於1號

url: api?id=39&type=test 
result(preview): data: [id: 39, type: test, value: 'value matching id 39'] 

對於3號的

url: api?id=39&type=test (same for 40 and 41) 
result(preview): data: [id: 39, type: test, value: 'value matching id 40'] 

它幾乎看起來像PHP不是HANDELING請求正確。打開api網址(http://url/api?id=39&type=test)總是給我預期的結果。從javascript調用api多次給了我混雜的結果。

+0

解決了現在。 – SanderW

+0

我有兩次使用角度調用java api相同的問題。即使使用Restangular也是如此。也許問題更根本。 –

+0

我只是想出了使用彈簧和運動衫時出現這種情況的人。簡單的解決方案是將資源類的範圍更改爲原型,以便每個請求都有一個新的範圍。查看下面的答案以獲取更多詳細信息。 –

回答

0

它看起來不錯,也許是PHP沒有識別「GET」動作。

您是否嘗試在工廠中放置console.log以查看是否正在使用正確的url? (並且很高興看到網絡)。

而且你還可以做的「爛路」(只是爲了測試),把網址硬編碼是這樣的:

url: url + "?id=" + object.id + "&type=" + object.type 
+0

我試過了你的建議,但結果是一樣的。我做了一個console.log(對象)和console.log(結果)(對於.get和結果) 該對象具有所有正確的參數,但結果爲該特定ID提供了錯誤的值。 php腳本根據該ID和ID本身返回一個值。所以我無法弄清楚爲什麼http.get的結果是錯誤的。 – SanderW

+0

,你會得到相同的結果? –

+0

您可以檢查瀏覽器網絡工具上的請求(我更喜歡chrome或firefox http://stackoverflow.com/questions/4423061/view-http-headers-in-google-chrome) –

0

在您使用Spring配置時,其在Java這個問題的情況下在使用球衣的情況下,問題可能是由@component標記時資源的單例性質造成的。當一個新的請求到達時,同一個bean與舊的注入值一起用於查詢,頭文件參數和其他業務對象。這意味着它將使用舊值獲取數據。

一個解決它的方法是使用在資源類原型範圍內的每個時間是有要求得到一個新的實例與新鮮注入:@Scope("prototype")修改get方法簽名,以便它需要的所有值如參數注入的方法而不是注入對象。

第二個選項更好,因爲實例將被重用並且每個方法調用只有參數會發生更改。

取而代之的是

@QueryParam("searchTerm") 
private String searchTerm; 

@GET 
private Product findProduct() { 
    productDao.find(searchTerm); 
} 

通過同步處理ID的做到這一點

@GET 
private Product getProduct(@QueryParam("searchTerm") String searchTerm) { 
    productDao.find(searchTerm); 
}