>

이 문제가 발생하여 알아낼 수 없었습니다. ASP.NET Core 2와 Ajax를 사용하고 있습니다.

이것은 JavaScript 디버거가 말하는 것입니다 :

와이즈 비즈

이것은 내 JavaScript 코드입니다 :

XML Parsing Error: no root element found Location: http://localhost:52617/api/favorites/Line Number 1, Column 1:

그리고 내 API :

$(".js-toggle-fav").click(function (e) {
    function sendPost() {
        console.log("inside post send");
        var button = $(e.target);
        $.ajax({
            type: 'POST',
            url: "http://localhost:52617/api/Favorites/",
            data: {"EventId": @Model.Event.EventId},
            contentType: "application/json; charset=utf-8"
        });
    }
    $.getJSON("http://localhost:52617/api/favorites/@Model.Event.EventId", function (data) {
        if (data == null) {
            console.log("fav is null");
            sendPost();
            fav.addClass(toggling);
            fav.text("unfav");
        }
        else {
            console.log("fav is NOT null");
            sendPost();
            fav.removeClass(toggling);
            fav.text("fav");
        }
    );
});

Postman이나 restclient로이 작업을 수행하면 모든 것이 매력처럼 작동합니다! Ajax에서는 그렇지 않습니다.

와이즈 비즈 와이즈 비즈  파일에 이와 같은 작업을 수행하는 더 많은 jQuery 및 JavaScript 코드가 있으며 작동합니다! 모든 솔루션   인터넷에서 확인했지만 작동하지 않습니다.   
  • Get 메소드 (List를 리턴하거나 단일 요소가 작동 중입니다!)
  •    [HttpPost] public async Task<IActionResult> PostFavorite([FromBody] FavoriteDto favorite) { if (!ModelState.IsValid) { Console.WriteLine(ModelState.ValidationState.ToString()); return BadRequest(ModelState); } var uid = _userManager.GetUserId(HttpContext.User); var fav = await _context.Favourites.SingleOrDefaultAsync(x => x.EventId == favorite.EventId && x.UserId == uid); if (fav == null) { _context.Favourites.Add(new Favorite { EventId = favorite.EventId, UserId=uid }); } else { _context.Favourites.Remove(fav); } try { await _context.SaveChangesAsync(); } catch (DbUpdateException) { if (FavoriteExists(favorite.EventId)) { return new StatusCodeResult(StatusCodes.Status409Conflict); } else { throw; } } return Ok(favorite); }

    • 답변 # 1

      문제는

      data: {"EventId": @Model.Event.EventId},
      
      

      직접 전달하는 대신 JSON.Stringify를 사용하십시오

      var payload = {EventId: @Model.Event.EventId};
      $.ajax({
             type: 'POST',
             url: "http://localhost:52617/api/Favorites/",
             data: JSON.stringify(payload),
             contentType: "application/json; charset=utf-8"
            });
      
      

      FavoriteDto 클래스가 다음과 같다고 가정합니다

      public class FavoriteDto
      {
         public int EventId { get; set; }
      }
      
      

      XML 오류가 발생한 이유는 컨트롤러 작업 때문입니다

      public async Task<IActionResult> PostFavorite([FromBody] FavoriteDto favorite)
      
      

      'favorite'를 파싱 할 수 없으므로 초기화되지 않았으며 null입니다. 그런 다음 ok (null)를 반환하여 서버에서 응답을 다시 받았을 때 클라이언트 측 ajax에서 구문 분석 오류를 일으켰습니다.

    • 답변 # 2

      DELETE 중에이 오류가 발생했습니다  ASP.Net Core 2.1 웹 API를 호출하십시오. 나는 [FromBody] 를 제거   DELETE 에서 예상 된 모델에서

      와 같은 전화
      public async Task<IActionResult> Delete(MyModel body)
      {
        // Just an example
        await DoSomeWork(body);
        return StatusCode(200);
      }
      
      
      그러나 문제를 해결하지 못했습니다. 그러나 StatusCode 로 일부 내용을 반환 한 후 이 예제에서는 단순한 문자열로 오류가 사라졌습니다. 따라서 다음 코드는 Firefox에서 오류를 피해야합니다.

      public async Task<IActionResult> Delete(MyModel body)
      {
        // Just an example
        await DoSomeWork(body);
        return StatusCode(200, "Deletion Successfull");
      }
      
      

    • 답변 # 3

      다른 답변에 추가하기 위해이 오류는 jQuery ajax가 유효한 JSON을 기대하거나 내용이 전혀없는 빈 문자열 응답을 얻는 경우에도 발생할 수 있습니다.

      data 의 값을 확인   done 에서  콜백, 빈 문자열 인 경우 ""   undefined 보다는 상태 코드 204 (No Content) 를 반환하도록 서버를 수정해야합니다.   200 (OK) 대신  내용이 없습니다.

      WebAPI2에서 이것은 StatusCode(HttpStatusCode.NoContent) 를 반환하는 것을 의미합니다.   Ok() 대신 .

    관련 자료

  • 이전 ruby on rails - heroku run rake db - seed가 실패했습니다
  • 다음 xamarin.forms - Xamarin 양식 Android에서 활성화 된 Proguard와 함께 APK 파일이 작동하지 않음