Я пытаюсь получить данные для нескольких идентификаторов, например:
(Сильно упрощенно, но я надеюсь, что смогу четко указать)
контроллер:
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; } ]);
Backend:
<?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: 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, будет правильным. Это не тот случай. Есть ли способ правильно привязать идентификатор к правильному значению соответствия?
Изменить: если посмотреть на вкладку сети в хроме, произойдет следующее:
Для 1 id
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 не обрабатывает запросы должным образом. Открытие api url ( http: // url / api? Id = 39 & type = test ) всегда дает мне ожидаемый результат. Вызов api несколько раз из javascript дает мне смешанные результаты.
Его взгляд в порядке, возможно, PHP не идентифицирует действие «GET».
Вы пытались поместить console.log на фабрике, чтобы увидеть, правильно ли используется URL? (и его хорошо видеть в сети).
И вы также можете сделать «плохой способ» (просто проверить), поместив URL жестко закодированным следующим образом:
url: url + "?id=" + object.id + "&type=" + object.type
Если у вас возникла эта проблема в java при использовании весенней конфигурации с трикотажем, проблема может быть вызвана одноэлементным характером ресурса при пометке с помощью @component. Когда приходит новый запрос, тот же компонент используется со старыми введенными значениями для запроса, параметров заголовка и других бизнес-объектов. Это означает, что он будет извлекать данные с использованием старых значений.
Один из способов исправить это – использовать область прототипа в классе ресурсов, чтобы получить новый экземпляр со свежей инъекцией каждый раз, когда есть запрос: @Scope("prototype")
или изменить подпись метода get, чтобы все необходимые ему значения такие как параметры, вводимые в методе, а не в объект.
Второй вариант лучше, потому что экземпляр будет использоваться повторно, и только параметры будут меняться для каждого вызова метода.
Вместо этого
@QueryParam("searchTerm") private String searchTerm; @GET private Product findProduct() { productDao.find(searchTerm); }
Сделай это
@GET private Product getProduct(@QueryParam("searchTerm") String searchTerm) { productDao.find(searchTerm); }