Buduję małe rozszerzenie Chrome, które musi wysyłać wiadomości za pośrednictwem żądania http POST do serwera w mojej sieci firmowej i używam jQuery 1.4. 1, aby przyspieszyć rozwój części javascript.jQuery.ajax() wysyła żądania POST jako GET w rozszerzeniu do Chrome
Mam ten kod, aby wysłać żądanie:
function send() {
$.ajax({
url: "http://mycompany.com/update",
method: "POST",
data: {status: "sometest", in_reply_to_status_id: "anId"},
success: function(data, textStatus) {
console.log("success");
console.log(data);
console.log(textStatus);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
console.log("error");
console.log(XMLHttpRequest);
console.log(textStatus);
console.log(errorThrown);
},
complete: function(XMLHttpRequest, textStatus) {
console.log("complete");
}
});
}
Żądanie wykonane w ten sposób nie powiedzie się, w Chrome zalogować widzę, że serwer odpowie stanu HTTP 400 i z tekstem „To metody wymaga STANOWISKO".
Jeśli zmienię do kodu powyżej z tym:
function send() {
$.post("http://sunshine.emerasoft.com/statusnet/api/statuses/update.xml", {status: "sometext", in_reply_to_status_id: "anId"}, function(data) {
console.log(data)
});
}
wszystko działa poprawnie, status HTTP 200 i po stronie serwera Widzę, że dane wysłałem jest poprawnie zapisane.
Potrzebuję użyć pełnej metody $ .ajax(), ponieważ muszę wykonać pewną pracę w przypadku powodzenia lub niepowodzenia, a jeszcze inne, gdy żądanie jest zakończone, więc $ .post() to za mało.
Czy robię coś złego, dzwoniąc do $ .ajax(), lub jest jakiś problem, może dlatego, że jestem w xontekście rozszerzenia Chrome?
Dzięki
Masz całkowitą rację :) Przeszedłem przez dokumentację jQuery milion razy i nigdy nie zauważyłem, że użyłem niewłaściwej opcji. Dzięki za wskazanie mi tego! –
Co zaskakujące, zajęło mi to dużo czasu, aby rozwiązać ... Podczas wykonywania testu POST z tej samej domeny, używałbym POST, gdy miałem tam "metodę". Ale gdy tylko spróbuję POST z innej domeny "między domenami", w końcu będzie GET. To rozwiązało problem. Nie mam pojęcia, dlaczego "metoda" działa w tej samej domenie. – Futile32