2015-09-17 11 views
6

To jest naprawdę podniecające mój umysł. Otrzymuję komunikat zwrotny błędu z ajax. Ale jeśli biorę res.responseText (który powraca poprawny, btw) od komunikatu o błędzie i używa go, robi to, co trzeba. Tak, jakbym otrzymał oddzwonienie o powodzeniu.wywołanie jquery ajax zwracające błąd z readystate 4, status 200, statustext ok

Dane są ustawione tak:

var dataToSend = {fieldname : textdata}; 

i ajax połączeń jest tak:

var ajaxOptions = { 
    url: '/newpage', 
    data: JSON.stringify(dataToSend), 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'json', 
    cache: false, 
    processData: false, 
    type: 'POST', 
    success: function(res) { 
     console.log("success!"); 
     $('#' + divname).html(res); 
    }, 
    error: function(res) { 
     console.log("There was an error: " + JSON.stringify(res)); 
     $('#' + divname).html(res.responseText); 
    } 
}; 

$.ajax(ajaxOptions); 

Komunikat o błędzie jest: Wystąpił błąd: {"readyState":4,"responseText" [this part is perfectly fine], "status":200, "statusText":"OK"}.

+0

'dataType: 'json',' to oczekiwana odpowiedź ze źródła. czy możesz upewnić się, że źródło, które uderzasz, produkuje json jako wynik? jeśli nie, spróbuj po usunięciu go. – Jai

+1

wygląda na to, że zwracasz tekst/html .... więc błąd jest prawdopodobnie błędem analizy json. Usuń 'dataType: 'json''. Pokaż, co jest faktycznie zwracane – charlietfl

+0

@Jai - To było dobre! Zmieniłem typ na dane JSON w mojej bazie danych, ale nadal dostaję ten sam błąd. – lynvie

Odpowiedz

8

Jeśli twój responseText nie jest prawidłowym JSON, zostanie zgłoszony błąd analizy składni. Albo upewnij się, że odpowiedź jest poprawna JSON lub usunąć dataType: "json".

Od jQuery docs:

dataType (default: Intelligent Guess (xml, json, script, or html))

Type: String

The type of data that you're expecting back from the server. If none is specified, jQuery will try to infer it based on the MIME type of the response (an XML MIME type will yield XML, in 1.4 JSON will yield a JavaScript object, in 1.4 script will execute the script, and anything else will be returned as a string). The available types (and the result passed as the first argument to your success callback) are:

...

"json": Evaluates the response as JSON and returns a JavaScript object. Cross-domain "json" requests are converted to "jsonp" unless the request includes jsonp: false in its request options. The JSON data is parsed in a strict manner; any malformed JSON is rejected and a parse error is thrown. As of jQuery 1.9, an empty response is also rejected; the server should return a response of null or {} instead. (See json.org for more information on proper JSON formatting.)

1

Dzieje się tak, gdy masz dataType zestawu, aby uzyskać odpowiedź, ale odpowiedź nie jest to, co się w typ danych.

W twoim przypadku ustawiono dataType: 'json', i tak jak wspomniałeś w sekcji komentarzy, ustawiłeś string w zapleczu, więc musisz zmienić typ danych na text.

zmienić typ danych do:

dataType: 'text', 
+0

Używam mongodb. Mam {type: Schema.Types.Mixed}. Kiedy piszę konsolę .log var dataToSend drukuje: "title": "This title.". Następnie wysyłam go za pomocą JSON.stringify (dataToSend). Czy to nie wystarczy, aby dane były JSON? – lynvie

+1

@lynvie, masz problem z danymi respondenta, a nie z wysłanymi danymi. Musisz wykonać polecenie 'console.log (responseText)' i sprawdzić, czy jest to JSON – Diego

0

Jednym ze sposobów na rozwiązanie serverside problemem jest echo pustą tablicę, json zakodowany:

echo json_encode([]); 
return; 

Następnie funkcja sukces zostanie wywołany zamiast błędu .

Lub po prostu zmień scenariusz skryptowy dataType: 'json', na dataType: 'text',, aby nakazać jquery uzyskanie odpowiedzi tekstowej.

Powiązane problemy