2016-10-29 18 views
0

ajaxを使用してデータを取得する際に問題があります。私のテストでは、私が望むものを返していますが、IISでサーバーにプロジェクトを公開すると、自分のページのHTMLコードが返され、 "構文エラー:予期しないトークン<がJSONの位置0として返されます。誰でも助けてくれますか?ほんとうにありがとう。以下は感謝:)構文エラー:予期しないトークン<JSONの位置0として

私のコードです:

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); 
    } 

上記のコードは、JSON形式で地域の一覧を返します。

public SelectList RegionList(string zname) 
    { 
     CustomerModel cust = new CustomerModel(); 
     List<SelectListItem> regionname = new List<SelectListItem>(); 
     try 
     { 

      dt1.Clear(); 
      MySqlConnection mycon = new MySqlConnection(conn.getconnections("mysql")); 
      mycon.Open(); 
      if (zname == null || zname == "") 
      { 
       cmdsql = mycon.CreateCommand(); cmdsql.CommandText = "SELECT regionname FROM tbl_region WHERE STATUS=1 group by regionname order by regionname asc"; 
      } 
      else 
      { 
       cmdsql = mycon.CreateCommand(); cmdsql.CommandText = string.Format("SELECT regionname FROM tbl_region WHERE STATUS=1 and zonecode='{0}' group by regionname order by regionname asc", getzonecode(zname)); 
      } 
      drsql = cmdsql.ExecuteReader(); 
      try 
      { 
       if (drsql.HasRows) 
       { 
        regionname.Add(new SelectListItem { Text = "- Select -", Value = "", Selected = true }); 
        regionname.Add(new SelectListItem { Text = "All Region", Value = "AllRegion" }); 
        while (drsql.Read()) 
        { 
         regionname.Add(new SelectListItem { Text = drsql["regionname"].ToString().ToUpper().Trim(), Value = drsql["regionname"].ToString().ToUpper().Trim() }); 
        } 
       } 
      } 
      catch (Exception ex) { cust.WriteToFile(ex.ToString()); return null; } 
     } 
     catch (Exception ex) { cust.WriteToFile(ex.ToString()); } 
     return new SelectList(regionname, "Value", "Text"); 
    } 

このメソッドは、領域のリストを取得する際に呼び出されます。

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);      
      } 
     }); 
    }); 
}); 

これは私が返された結果が自分のWebページのhtml形式にあったこれをデバッグするとき、私の_reference.jsコードです。してください、誰もこの問題で私を助けることができます。私はすでにそれを研究してみましたが、それと同じ問題です。

+0

apiからあなたの応答にいくつかのhtml文字があるようです..変数に警告または通知が含まれているかどうかを確認し、すべてのhtml文字を取り除き、JSON.parse(データ)を使用して応答を解析します。 – axcl

+0

ネットワーク・タブを開き、応答ペイロードを確認します。 –

答えて

1

回答がhtml形式になっている理由はいくつかあります。

  1. あなたのAJAX要求が存在し、したがって、404エラーが見つかりません
  2. にあなたがテストしていると、ユーザーIDが
  3. 401権限エラーが発生し、サーバーリソースへのアクセスを許可されていません結果はありませんのURLあなたのAJAX要求は403禁止エラーが生じファイアウォールによってブロックされてきている
  4. あなたのサーバー側のコードは、500内部サーバーエラー

が存在することができ、よりシェーナ結果として投棄されますリオスしかし、あなたの問題はポイントナンバーであると仮定します。 JSONパーサーは「<HTML>」の「<」を読んでいるのでUnxpectedトークン< JSON内の位置0のように:

<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> 

あなたが取得している構文エラー:4以上、あなたが取得される可能性があります応答は次のようになりますレスポンスで無効なJSONです。

@torazaburoが彼のコメントで述べたように、あなたのネットワークタブで正確な応答を確認し、メッセージに基づいて、サーバー側のコードを修正します。

+0

これはコメントのように聞こえますが、回答として投稿するべきではありません。しかし、それをステートメントに編集すると、それは答えになり、正しいものになるでしょう。 –

+0

@SamKuhmonenあなたは正しいです。しかし、私は質問にコメントするのに十分なクレジットがありません。 –

+0

はい、これは答えに編集する方が良い理由は、問題の良い答えであるからです。 –

0

私はすでに自分のコードの問題を把握しています。それは私のjsファイルと関係があります。 URL行では、私のサーバー側でアプリケーションのフォルダ名を見つけることができません。コントローラにリダイレクトされます。

https://myの代わりにip address/my folderアプリケーション。このようになりましたhttps://my ip address/Home/getregion。それは私のコントローラにリダイレクトされます。

だから、私はこのようにそれを変更します。それは私のアプリケーションフォルダを見つけることができない理由

$.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);      
     } 
    }); 

誰も私を助けることができますか?ありがとうございます:)

関連する問題