Chcę obsłużyć żądanie AJAX, które aktualizuje jednostkę. Naprawdę nie potrzebuję tego, aby zwrócić wszystko. Problem polega na tym, że Spring MVC nalega na wysłanie przekierowania do tego samego adresu URL (najwyraźniej robi to po przekierowaniu), co przeglądarka posłusznie przestrzega.Jak mogę zapobiec przekierowaniu Spring MVC?
Jak mogę mieć metodę kontrolera Spring MVC po prostu zakończyć i zwrócić coś bez wysyłania przekierowania? Wyszukiwanie w sieci prowadzi tylko do niezliczonych dyskusji o tym, jak wykonać przekierowanie, a nie jak tego uniknąć.
To żądanie PUT do http://localhost:9090/pex/api/testrun/f0a80b46-84b1-462a-af47-d1eadd779f59e
z tych nagłówków:
Host: localhost:9090
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0
Accept: */*
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Length: 20
Content-Type: application/json
Referer: http://localhost:9090/pex/api/testrun/f0a80b46-84b1-462a-af47-d1eadd779f59e/visualizations/common-api?slas=lp,internal,external
X-Requested-With: XMLHttpRequest
Connection: keep-alive
Authorization: Basic xxxx
Odpowiedź jest kod stanu "302 Found", bez zawartości ciała i te nagłówki:
Content-Language: "de"
Content-Length: "0"
Location: "http://localhost:9090/pex/api/testrun/f0a80b46-84b1-462a-af47-d1eadd779f59e"
Server: "Jetty(6.1.10)"
access-control-allow-origin: "*"
Oto po stronie serwera kod:
@RequestMapping(value = "/api/testrun/{testrunId}", method = RequestMethod.PUT, consumes = "application/json")
@ResponseBody
public Testrun updateOverview(@PathVariable("testrunId") final String testrunId, @RequestBody final String body) {
return testrunService.updateOverview(testrunId, body);
}
Oto kod Javascript wywołujący połączenie AJAX:
$(document).ready(function() {
$("#update_name_form").submit(function (e) {
update_testrun($("#name"));
return false;
});
}
function update_testrun(element) {
var name = element.attr('name');
var new_value = element.val().trim();
var data = {};
data[name] = new_value;
$.ajax({url: config.urls.api.testrun + testrun.id,
type: "PUT",
contentType: "application/json",
data: JSON.stringify(data),
error: function(jqXHR, textStatus, errorThrown) {
alert(errorThrown);
},
success: function (data, textStatus, jqXHR) {
testrun.overview[name] = new_value;
}
});
}
'@ ResponseBody' nie wysyła domyślnie przekierowania; prawdopodobnie dzieje się coś innego. – beerbajay
przy użyciu metody adnotacji '@ ResponseBoby' powinien zwracać tylko serializowany obiekt' Testrun' bez przekierowania. Z którego kodu korzystasz podczas połączenia AJAX? – davioooh
Należy podać więcej szczegółów, np. Informacje o konsoli sieciowej z odpowiedzią przekierowania. Wysłany przez Ciebie kod nie spowodowałby przekierowania. –