jQuery 1.5.2 отображает [object XmlDocument] для пустых ответов

#ajax #jquery #response

#ajax #jquery #ответ

Вопрос:

У меня есть URL, из которого я могу получить строку

Если строка ответа содержит что-то, все идет хорошо, но (не дай бог!) если результатом будет пустая строка типа «», jQuery 1.5.2 отобразит ее как [object XmlDocument]

следуйте кодам, пожалуйста :

  $.post('/Applicant/RequestedJob/IsThereActivePeriod',{},
    function(data){     
        if(data == '' ) 
        {
                //do something here!
        }
        else 
        {
            console.log(data.toString());
            // [object XMLDocument]  will be printed in console.
        }        
});
  

Возможно, я должен упомянуть, что раньше он отлично работал на jQuery 1.4.4
есть идея?

С уважением 🙂

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

1. является openDialog диалогом пользовательского интерфейса jquery??

2. да! но смысл в чем-то другом!!! 😉 это значение параметра данных

3. вы имеете в виду, что вы получаете [object XMLDocument] в диалоговом окне??

4. нет! значение данных, которые должны были быть пустой строкой, равно [object XmlDocument]

5. означает, что где-то у вас есть какой-то заголовок header('content-type: xml/doc')

Ответ №1:

Вы должны установить ожидаемый тип данных ответа в вашем вызове ajax, вот так:

 $.post('/Applicant/RequestedJob/IsThereActivePeriod',{},
    function(data){     
        if(data == '' ) 
            openDialog('/Applicant/RequestedJob/AddRequestedJobWindow','pnlRequestedJob','Request Window'); 
        else 
        {
            msgbox.show(data.toString(),'Error', msgBoxButtons.okOnly); 
            console.log(data.toString());
        }
    },
    'html'
);
  

Без этого jQuery пытается определить тип ответа в соответствии с этим:

По умолчанию: интеллектуальное предположение (xml, json, script или html).

Поскольку возвращаемого содержимого нет, он, по-видимому, использует XML. Передавая ‘html’ в качестве типа данных, вы заставляете jQuery интерпретировать ответ как HTML и сохранять результат в виде обычного текста.

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

Причина, по которой вы получаете, [object XMLDocument] заключается в том, data что это объект XML document, и вызывается его toString() .

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

1. Отличное объяснение, Пол! На самом деле я думал, что никогда не найду ответ на этот вопрос, потому что в моем случае это происходило только в браузере Firefox (другие браузеры не отображали его, хотя я не указывал тип данных). Должен любить StackOverflow!!!