Ajax request zwraca 200 OK, ale zamiast powodzenia zostanie wywołane zdarzenie błędu
Zaimplementowałem żądanie Ajax na mojej stronie internetowej i wywołuję punkt końcowy ze strony internetowej. Zawsze zwraca 200 OK, ale jQuery wykonuje zdarzenie błędu. Próbowałem wielu rzeczy, ale nie mogłem zrozumieć problemu. Dodaję poniżej swój kod:
Kod JQuery
var row = "1";
var json = "{'TwitterId':'" + row + "'}";
$.ajax({
type: 'POST',
url: 'Jqueryoperation.aspx?Operation=DeleteRow',
contentType: 'application/json; charset=utf-8',
data: json,
dataType: 'json',
cache: false,
success: AjaxSucceeded,
error: AjaxFailed
});
function AjaxSucceeded(result) {
alert("hello");
alert(result.d);
}
function AjaxFailed(result) {
alert("hello1");
alert(result.status + ' ' + result.statusText);
}
C # kod dla JqueryOpeartion.aspx
protected void Page_Load(object sender, EventArgs e) {
test();
}
private void test() {
Response.Write("<script language='javascript'>alert('Record Deleted');</script>");
}
Potrzebuję ("Record deleted")
ciąg znaków po pomyślnym usunięciu. Jestem w stanie usunąć zawartość, ale nie dostaję tej wiadomości. Czy to prawda czy robię coś nie tak? Jaki jest prawidłowy sposób rozwiązania tego problemu?
15 answers
jQuery.ajax
próbuje przekonwertować ciało odpowiedzi w zależności od podanego parametru dataType
lub nagłówka Content-Type
wysłanego przez serwer. Jeśli konwersja nie powiedzie się (np. jeśli JSON/XML jest nieprawidłowy), wywołane zostanie wywołanie zwrotne o błędzie.
Twój kod AJAX zawiera:
dataType: "json"
W tym przypadku jQuery:
Ocenia odpowiedź jako JSON i zwraca obiekt JavaScript. […] Dane JSON są przetwarzane w ścisły sposób; każdy nieprawidłowy JSON jest odrzucony i parse błąd jest wyrzucany. [...] pustą odpowiedzią jest również odrzucony; serwer powinien zamiast tego zwrócić odpowiedź null lub {}.
Twój kod po stronie serwera zwraca fragment HTML ze statusem 200 OK
. jQuery oczekiwał poprawnego JSON i dlatego wywołuje wywołanie zwrotne o błędzie narzekając na parseerror
.
Rozwiązaniem jest usunięcie parametru dataType
z kodu jQuery i zwrócenie kodu po stronie serwera:
Content-Type: application/javascript
alert("Record Deleted");
Ale raczej sugerowałbym zwrócenie odpowiedzi JSON i wyświetlanie wiadomość wewnątrz wywołania zwrotnego sukcesu:
Content-Type: application/json
{"message": "Record deleted"}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-18 14:26:23
Miałem trochę szczęścia w używaniu wielu, rozdzielonych spacjami dataType
s (jQuery 1.5+). Jak w:
$.ajax({
type: 'POST',
url: 'Jqueryoperation.aspx?Operation=DeleteRow',
contentType: 'application/json; charset=utf-8',
data: json,
dataType: 'text json',
cache: false,
success: AjaxSucceeded,
error: AjaxFailed
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-25 10:13:53
Po prostu musisz usunąć dataType: "json" w wywołaniu AJAX
$.ajax({
type: 'POST',
url: 'Jqueryoperation.aspx?Operation=DeleteRow',
contentType: 'application/json; charset=utf-8',
data: json,
dataType: 'json', //**** REMOVE THIS LINE ****//
cache: false,
success: AjaxSucceeded,
error: AjaxFailed
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-07 03:23:49
To tylko dla przypomnienia, ponieważ wpadłem na ten post, szukając rozwiązania mojego problemu, który był podobny do OP.
W moim przypadku moje żądanie Jquery Ajax nie powiodło się ze względu na politykę samego pochodzenia W Chrome. Wszystko zostało rozwiązane, gdy zmodyfikowałem mój serwer (Node.js) do zrobienia:
response.writeHead(200,
{
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "http://localhost:8080"
});
Dosłownie kosztowało mnie to godzinę walenia głową o ścianę. Czuję się głupio...Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-25 10:23:34
Myślę, że Twoja strona aspx nie zwraca obiektu JSON. Twoja strona powinna zrobić coś takiego (page_load)
var jSon = new JavaScriptSerializer();
var OutPut = jSon.Serialize(<your object>);
Response.Write(OutPut);
Również spróbuj zmienić swój AjaxFailed:
function AjaxFailed (XMLHttpRequest, textStatus) {
}
textStatus
powinno dać ci rodzaj błędu, który dostajesz.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-09 07:28:13
Miałem do czynienia z tym problemem ze zaktualizowaną biblioteką jQuery. Jeśli metoda service niczego nie zwraca, oznacza to, że zwracanym typem jest void
.
Następnie w wywołaniu Ajax proszę wspomnieć dataType='text'
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-25 10:31:58
Musisz tylko usunąć dataType: 'json'
z nagłówka, jeśli zaimplementowana metoda Web service jest nieważna.
W tym przypadku, wywołanie Ajax nie oczekuje, że będzie miało JSON return datatype.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-25 10:18:38
Miałem ten sam problem. Mój problem polegał na tym, że mój kontroler zwracał kod stanu zamiast JSON. Upewnij się, że kontroler zwraca coś w stylu:
public JsonResult ActionName(){
// Your code
return Json(new { });
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-25 10:20:25
Kolejną rzeczą, która mi namieszała, było użycie localhost
zamiast 127.0.0.1 lub odwrotnie. Najwyraźniej JavaScript nie może obsługiwać żądań od jednego do drugiego.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-25 10:17:37
Użyj poniższego kodu, aby upewnić się, że odpowiedź jest w formacie JSON (wersja PHP)...
header('Content-Type: application/json');
echo json_encode($return_vars);
exit;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-25 10:19:42
Miałem ten sam problem. To dlatego, że moja odpowiedź JSON zawiera kilka znaków specjalnych i plik serwera nie został zakodowany z UTF-8, więc wywołanie Ajax uznał, że nie była to prawidłowa odpowiedź JSON.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-25 10:31:19
Zobacz to . Jego również podobny problem. Próbowałem pracować.
Dont remove dataType: 'JSON',
Uwaga: echo only JSON Formate w pliku PHP jeśli używasz tylko PHP echo Twój kod ajax return 200
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-03 11:48:30
Mam podobny problem, ale gdy próbowałem usunąć datatype: 'json' Nadal mam problem. Mój błąd jest wykonywany zamiast sukcesu
function cmd(){
var data = JSON.stringify(display1());
$.ajax({
type: 'POST',
url: '/cmd',
contentType:'application/json; charset=utf-8',
//dataType:"json",
data: data,
success: function(res){
console.log('Success in running run_id ajax')
//$.ajax({
// type: "GET",
// url: "/runid",
// contentType:"application/json; charset=utf-8",
// dataType:"json",
// data: data,
// success:function display_runid(){}
// });
},
error: function(req, err){ console.log('my message: ' + err); }
});
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-09 01:08:18
Twój skrypt wymaga zwrotu w typie danych JSON.
Spróbuj tego:
private string test() {
JavaScriptSerializer js = new JavaScriptSerializer();
return js.Serialize("hello world");
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-21 05:10:01
Spróbuj podążać
$.ajax({
type: 'POST',
url: 'Jqueryoperation.aspx?Operation=DeleteRow',
contentType: 'application/json; charset=utf-8',
data: { "Operation" : "DeleteRow",
"TwitterId" : 1 },
dataType: 'json',
cache: false,
success: AjaxSucceeded,
error: AjaxFailed
});
Lub
$.ajax({
type: 'POST',
url: 'Jqueryoperation.aspx?Operation=DeleteRow&TwitterId=1',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
cache: false,
success: AjaxSucceeded,
error: AjaxFailed
});
Użyj podwójnych cudzysłowów zamiast pojedynczych cudzysłowów w obiekcie JSON. Myślę, że to rozwiąże problem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-31 11:39:58