Найти заголовок / любой тег ошибки Ajax. ResponseText из его строки Html или преобразованного объекта jQuery - PullRequest
0 голосов
/ 29 августа 2018

Я хочу выполнить действие контроллера с помощью jQuery ajax и не делал это намеренно, чтобы показать ошибку.

» Ошибка сервера в приложении '/'
Ресурс не найден. Описание: HTTP 404. Ресурс, который вы ищете (или один из его зависимости) можно было бы удалить, изменить его имя или Временно недоступен. Пожалуйста, просмотрите следующий URL и сделайте уверен, что оно написано правильно. Запрашиваемый URL: / SoftwareCompany / HamdunSoft «

Поскольку вышеупомянутая ошибка проходит через ajax error.responseText

error: function(error)
                {
                }

Полный error.responseText находится в следующем фрагменте кода.

"
<!DOCTYPE html>
<html>

<head>
  <title>The resource cannot be found.</title>
  <meta name="viewport" content="width=device-width" />
  <style>
    body {
      font-family: "Verdana";
      font-weight: normal;
      font-size: .7em;
      color: black;
    }
    
    p {
      font-family: "Verdana";
      font-weight: normal;
      color: black;
      margin-top: -5px
    }
    
    b {
      font-family: "Verdana";
      font-weight: bold;
      color: black;
      margin-top: -5px
    }
    
    H1 {
      font-family: "Verdana";
      font-weight: normal;
      font-size: 18pt;
      color: red
    }
    
    H2 {
      font-family: "Verdana";
      font-weight: normal;
      font-size: 14pt;
      color: maroon
    }
    
    pre {
      font-family: "Consolas", "Lucida Console", Monospace;
      font-size: 11pt;
      margin: 0;
      padding: 0.5em;
      line-height: 14pt
    }
    
    .marker {
      font-weight: bold;
      color: black;
      text-decoration: none;
    }
    
    .version {
      color: gray;
    }
    
    .error {
      margin-bottom: 10px;
    }
    
    .expandable {
      text-decoration: underline;
      font-weight: bold;
      color: navy;
      cursor: hand;
    }
    
    @media screen and (max-width: 639px) {
      pre {
        width: 440px;
        overflow: auto;
        white-space: pre-wrap;
        word-wrap: break-word;
      }
    }
    
    @media screen and (max-width: 479px) {
      pre {
        width: 280px;
      }
    }
  </style>
</head>

<body bgcolor="white">

  <span><H1>Server Error in '/' Application.<hr width=100% size=1 color=silver></H1>

            <h2> <i>The resource cannot be found.</i> </h2></span>

  <font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">

    <b> Description: </b>HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. &nbsp;Please review the following URL and make sure that it is spelled correctly.
    <br><br>

    <b> Requested URL: </b>/Chemical/DyeingPartList<br><br>

    <hr width=100% size=1 color=silver>

    <b>Version Information:</b>&nbsp;Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.6.1038.0

  </font>

</body>

</html>
<!-- 
[HttpException]: A public action method &#39;DyeingPartList&#39; was not found on controller &#39;Menu.Controllers.ChemicalStore.ChemicalController&#39;.
   at System.Web.Mvc.Controller.HandleUnknownAction(String actionName)
   at System.Web.Mvc.Controller.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
   at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
   at System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult)
   at System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult)
   at System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
   at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
   at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
-->"

Я превратил строку error.responseText в элемент объекта из этого ответа .

var element = $(error.responseText);

и элемент такой

enter image description here

Как мы видим, есть элемент с именем title в объекте в красном поле в позиции 2, проиндексированной 1. Я могу найти его ( title title ) innerHtml любым из следующие

 elem.get(1).innerHTML
 elem.get(1).text
 element[1].innerHTML
 element[1].text

Но я хочу найти это значение с помощью Jquery следующим образом. Потому что в некоторых случаях в будущем мне может потребоваться поиск элементов в объекте по имени свойства, а не по индексу. Пожалуйста, помогите мне, если это возможно.

$("title", element).html()
$(element).find("title").html()

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Вы можете использовать $.parseHTML для преобразования строки html в массив узлов DOM. Который может использоваться вместе с селекторами jquery и функцией:

 var dom_nodes = $($.parseHTML(e.responseText));
 alert( dom_nodes.filter('title').text());
0 голосов
/ 29 августа 2018

Сначала создайте документ из строки.

Как создавать объекты документа с помощью JavaScript

var doc = (new DOMParser).parseFromString(error.responseText, "text/html");
// first argument: html to be converted to doc
// second argument: mime_type (text/html or text/xml, it depends)

Во-вторых, вы знаете тренировку.

doc.querySelector("title").textContent;
// $(doc).find("title").html();
// The resource cannot be found.

Либо используйте $ .parseHTML и фильтруйте узлы.

var doc = $.parseHTML(error.responseText);
var titleNode = doc.filter(function (node) {
    return node.localName === "title";
});
console.log(titleNode[0].textContent);
...