Я нашел ответ, я не узнал логическую причину такого поведения, но данные не были в методе успеха, даже если код statuc был 200. на самом деле это было в ошибке: свойства ajax-запроса. я сделал следующее: вместо успешного добавления данных в элемент html. я сделал это в тексте ответа.
Вот код, прежде чем не работает:
function GetProfession(elementID) {
$.ajax({
url: "/Handlers/GlobalHandler.ashx",
dataType: "JSON",
contentType: "application/json;charset=utf-8",
//responseType: ResponseType,
data: {
functionName: "GetProfession"
},
success: function (data) {
return $("#" + elementID).html(data);
}
});
}
Вот тот, который работает
function GetProfession(elementID) {
$.ajax({
url: "/Handlers/GlobalHandler.ashx",
dataType: "JSON",
contentType: "text/html; charset=utf-8",
//responseType: ResponseType,
data: {
functionName: "GetProfession"
},
success: function (data, fata, meta) {
},
error: function (err) {
$("#Profession").html(err.responseText);
//alert(err.responseText);
}
});
}
Благодаря spoon16 и Bruce Murdock для указания на меня в правильном направлении. Код, что spoon16 отправил работы, но вынуждает Вас связать пространство имен с каждым именем элемента, которое не является столь же чистым, как я хотел бы.
Я сделал немного больше поиска, и я выяснил, как это, как предполагается, сделано - это супер кратко, и я люблю новое <...> синтаксис скобки для обращения к элементам XML.
Imports <xmlns:g='http://earth.google.com/kml/2.0'>
Imports System.Xml.Linq
...
Dim Kml As XDocument = XDocument.Load(Server.MapPath("../kmlimport/ga.kml"))
For Each Placemark As XElement In Kml.<g:Document>.<g:Folder>.<g:Placemark>
Dim Name As String = Placemark.<g:name>.Value
Next
Отметьте: g после xmlns в первой строке. Это дает Вам ярлык для обращения к этому пространству имен в другом месте.
Для больше о классе XNamespace, см. документацию MSDN.
Ни одно из вышеупомянутого не фиксирует, сделал задание; см. мои комментарии для деталей. Я полагаю, что и spoon16 и Bruce Murdock на правильном пути, так как пространство имен является определенно проблемой.
После дальнейшего поиска с помощью Google я столкнулся с некоторым кодом на этой странице, которая предложила обходное решение: просто разделите атрибут xmlns от исходного XML.
' Read raw XML
Dim RawXml As String = ReadFile("../kmlimport/ga.kml")
' HACK: Linq to XML choking on the namespace, just get rid of it
RawXml = RawXml.Replace("xmlns=""http://earth.google.com/kml/2.0""", "")
' Parse XML
Dim Kml As XDocument = XDocument.Parse(RawXml)
' Loop through placemarks
Dim Placemarks = From Placemark In Kml.<Document>.<Folder>.Descendants("Placemark")
For Each Placemark As XElement In Placemarks
Dim Name As String = Placemark.<name>.Value
...
Next
Если кто-либо может отправить рабочий код, который работает с пространством имен вместо того, чтобы уничтожить его, я с удовольствием дам им ответ.
У Scott Hanselman есть краткое решение для тех, которые ищут базирующееся решение C#.
Кроме того, использование XNamespace пригождается, вместо того, чтобы просто добавить строку. Это немного более формально.
// This code should get all Placemarks from a KML file
var xdoc = XDocument.Parse(kmlContent);
XNamespace ns = XNamespace.Get("http://earth.google.com/kml/2.0");
var ele = xdoc.Element(ns + "kml").Element(ns + "Document").Elements(ns + "Placemark");
Вы, возможно, должны добавить пространство имен к имени XElement
Dim ns as string = "http://earth.google.com/kml/2.0"
dim foo = Kml.Descendants(ns + "Document")
проигнорируйте любые синтаксические ошибки, я работаю в c#
Вы найдете, что может быть различие в XElement.Name
по сравнению с XElement.Name.LocalName/
Я обычно foreach
через весь XElements
в документе как первый шаг для проверки я использую правильное именование.
C# Здесь является выборкой моего использования, похож, я забыл {}
private string GpNamespace =
"{http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions}";
var results = admldoc.Descendants(GpNamespace +
"presentationTable").Descendants().Select(
p => new dcPolicyPresentation(p));
This works for me in C#:
XDocument doc = XDocument.Load(@"TheFile.kml");
var q = doc.Descendants().Where(x => x.Name.LocalName == "Placemark");