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?

Author: K48, 2011-05-31

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"}
 957
Author: Salman A,
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 dataTypes (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
});
 28
Author: jaketrent,
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
});
 24
Author: Philippe Genois,
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...
 14
Author: Corvin,
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.

 12
Author: LeftyX,
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'.

To rozwiąże problem.
 11
Author: Suresh Vadlakonda,
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.

 5
Author: Bilel omrani,
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 { });
}
 3
Author: Alexander Suleymanov,
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.

 1
Author: Paul,
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;
 1
Author: Terry Lin,
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.

 0
Author: Mehdi Izcool,
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

 0
Author: Inderjeet,
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); }
    });
}
 0
Author: Rakesh Kumar,
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");
}
 -1
Author: Kashif Faraz,
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.

 -10
Author: Salman Riaz,
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