2016-10-29 9 views
0

Ich habe Probleme beim Abrufen von Daten mit Ajax. Während meiner Tests in lokalen gibt es genau das, was ich wollte, aber wenn ich das Projekt auf dem Server mit IIS veröffentlichen, gibt es einen HTML-Code meiner Seite und mit einem Fehler "Syntax Fehler: Unexpected Token < in JSON als Position 0". Kann mir jemand helfen. Ich schätze es wirklich. Thanks :)Syntax Fehler: Unexpected Token <in JSON als Position 0

Im Folgenden sind mein Code:

Controller: 
[HttpGet] 
    public ActionResult getregion(string zname) 
    { 
     SelectList list = RegionList(zname); 

     var serializedData = JsonConvert.SerializeObject(list, Formatting.Indented, 
      new JsonSerializerSettings 
      { 
       ContractResolver = new CamelCasePropertyNamesContractResolver(), 
       NullValueHandling = NullValueHandling.Ignore 
      }); 

     return Json(list, JsonRequestBehavior.AllowGet); 
    } 

Der obige Code wird eine Liste der Region im JSON-Format zurück.

Diese Methode wird aufgerufen, um die Liste der Region abzurufen.

JAVASCRIPT: 
$(function() { 
    $('#zoneitem').change(function() { 
     var item = $('#zoneitem').val(); 
     var region = $("#regionitem"); 
     region.empty(); 

     if (item != "") { 
      $("#reportsitem").val($("#reportsitem option:first").val()); 
     } 
     $.ajax({ 
      type: "GET", 
      url: "Home/getregion", 
      contentType: "application/json; charset=utf-8", 
      data: { zname: item }, 
      cache: false, 
      dataType: "json", 
      success: function (result) { 
       for (var i = 0; i < result.length; i++) { 
        region.append('<option value="' + result[i].Value.trim() + '">' + result[i].Text.trim() + '</option>'); 
       } 
      }, 
      error: function (XMLHttpRequest, textStatus, errorThrown) { 
       alert(errorThrown);      
      } 
     }); 
    }); 
}); 

Das ist mein _reference.js Code, wenn ich das Debuggen des zurückgegebene Ergebnis in HTML-Format von meiner Web-Seite war. Bitte, kann mir jemand bei diesem Problem helfen. Ich recherchiere es schon und probier es doch immer noch das selbe Problem.

+0

Es scheint, dass es einige HTML-Zeichen in Ihrer Antwort von api ..Überprüfen Sie, ob es eine Warnung oder einen Hinweis für eine Variable enthält, und versuchen Sie, alle HTML-Zeichen zu entfernen und dann die Antwort mit JSON.parse (Daten) zu analysieren – axcl

+0

Öffnen Sie die Registerkarte Netzwerk und überprüfen Sie die Nutzdaten der Antwort. –

Antwort

1

Es gibt mehrere Gründe, warum Ihre Antwort im HTML-Format resultiert.

  1. Die URL Ihrer Ajax-Anforderung nicht vorhanden ist und die daraus resultierende somit in 404 Fehler nicht gefunden
  2. Die Benutzer-ID, mit dem Sie testen werden, ist nicht berechtigt, die Server-Ressource in 401 Unauthorized Fehler resultieren für den Zugriff auf
  3. Ihre ajax-Anforderung wird durch eine Firewall blockiert zu werden in 403 Forbidden Fehler resultierende
  4. Ihre Server-Seite Code Dumping in 500 Internal Server Error resultierende

Es kann mehr scena sein Rios, aber angenommen, Ihr Problem ist Punkt Nr. 4 oben, wird die Antwort, die Sie bekommen könnte so etwas wie:

<html> 
    <head> 
     <title>500 Internal Server Error</title> 
    </head> 
    <body> 
     <h1>Internal Server Error</h1> 
     <p>The server encountered an internal error or misconfiguration and  
     was unable to complete your request.</p> 
     <p>Please contact the server administrator, [email protected] 
     and inform them of the time the error occurred, and anything you 
     might have done that may have caused the error.</p> 
     <hr> 
     <address>Apache Server at xyz.com Port 80</address> 
    </body> 
</html> 

Sie erhalten Syntax-Fehler: Unxpected Token < in JSON als Position 0, da der JSON-Parser "<" von "<html>" liest in der Antwort, die ein ungültiger JSON ist.

Wie @torazaburo in seinem Kommentar erwähnt hat, überprüfen Sie die genaue Antwort in Ihrem Netzwerk-Tab und basierend auf der Nachricht, nehmen Sie Korrekturen in Ihrem Server-Side-Code.

+0

Das klingt wie ein Kommentar, der nicht als Antwort gepostet werden sollte. Aber wenn Sie es in eine Aussage bearbeiten, wird es eine Antwort und höchstwahrscheinlich die richtige sein. –

+0

@SamiKuhmonen hast du recht. Ich habe jedoch nicht genügend Credits, um eine Frage zu kommentieren. –

+0

Ja, deshalb ist es besser, dies in eine Antwort zu bearbeiten, da es eine gute Antwort auf das Problem ist. –

0

Ich schon herausfinden, das Problem meines Codes. es hat etwas mit meiner js-datei zu tun. In URL-Zeile, meine Server-Seite kann es den Ordnernamen meiner Anwendung nicht finden. Es wird zum Controller weitergeleitet.

Anstelle von https://my IP-Adresse/meine Ordner-Anwendung. Es wurde so https://my IP-Adresse/Home/getregion. in dem es zu meinem Controller umleiten.

Also, ich ändern Sie es wie folgt aus:

$.ajax({ 
     type: "GET", 
     url: " my folder application /Home/getregion", 
     contentType: "application/json; charset=utf-8", 
     data: { zname: item }, 
     cache: false, 
     dataType: "json", 
     success: function (result) { 
      for (var i = 0; i < result.length; i++) { 
       region.append('<option value="' + result[i].Value.trim() + '">' + result[i].Text.trim() + '</option>'); 
      } 
     }, 
     error: function (XMLHttpRequest, textStatus, errorThrown) { 
      alert(errorThrown);      
     } 
    }); 

Kann mir jemand helfen, warum es nicht meine Bewerbungsmappe finden können? Vielen Dank :)

Verwandte Themen