запрос jquery — ajax с указанием типа контента как html

#jquery #ajax

#jquery #ajax

Вопрос:

Я использую современный запрос jquery 1.5 ajax. На страницу в том же домене. Я пытаюсь улучшить поведение на сайте интрасети, используя grease monkey и jquery.

 var jqxhr = $.ajax("anotherpage-response.html")
.success(function(data) {alert("cmp"); console.log(data);})
.error(function() { alert("error"); })
.complete(function() { alert("complete"); });
  

В настоящее время он возвращается в виде строки. Есть идеи, как я могу вернуть его в виде dom-подобного объекта, который я могу обработать с помощью селекторов jquery???

Я думаю, что мне нужно что-то вроде fileType: html но, похоже, это не опция в запросе ajax. Может быть, мне просто нужно правильно прочитать api???

Спасибо

Комментарии:

1. Просто передать data в jQuery? $(data)

2. Кстати. вариант мог бы быть dataType , но в документации сказано: Возвращает HTML в виде обычного текста , так что, я думаю, это не поможет.

Ответ №1:

Вам следует ознакомиться с документацией jquery по этому вопросу: http://api.jquery.com/jQuery.ajax / Вероятно, вы ищете следующее: тип данных.

 $.ajax({ 
    url: 'request.html', 
    succes: function(data){ 
        .. do something here! ..
    }, 
    dataType: 'html'
});
  

Я надеюсь, что это поможет

Комментарии:

1. Работает ли это? В документации сказано: Возвращает HTML в виде обычного текста . Вы пробовали это?

2. В основном это задает заголовки для возвращаемого значения. Затем вы можете использовать $ (данные) для создания из него объекта jquery. Но это не действует как обычное тело. Вы можете использовать data.find(‘body’) для поиска этого объекта и манипулирования им. Вы должны обойти эту проблему, и jquery серьезно нуждается в принятии некоторых мер по этому поводу. Если вам нужно проделать много манипуляций, рассмотрите возможность возврата json-объекта и построения html с помощью javascript

3. Тогда я должен сказать, что ваш ответ вводит в заблуждение. Похоже, вы предлагаете использовать dataType: 'html' , и это должно сработать. Но добавление этого не улучшает ситуацию и оставляет OP по-прежнему там, где он есть сейчас …. не обязательно полезно.

Ответ №2:

Независимо от того, что вы получите обратно строку в виде обычного текста.

Из документов jQuery по типу данных:

«»html»: возвращает HTML в виде обычного текста; включенные теги скрипта оцениваются при вставке в DOM».

Однако вы всегда можете превратить открытый текст в объект dom..

 $.ajax({ 
url: 'request.html', 
succes: function(data){ 
  $(data) // This is now (kind of) a DOM object that you can use jQuery selectors on
}, 
dataType: 'html'
});
  

Ответ №3:

В jQuery 1.4 и ниже вы могли бы указать тип содержимого, передав dataType . В более поздних версиях jQuery пытается определить тип содержимого для вас.

Попробуйте что-то вроде этого:

 $.ajax({
    url: "anotherpage-response.html", 
    success: function(response, status, xhr){ 
        var ct = xhr.getResponseHeader("content-type") || "";
        if (ct.indexOf(‘html’) > -1) {
            //handle html content
        }
        else if (ct.indexOf(‘json’) > -1) {      
            //handle json object
        } 
    }
});