Локальный Вызов Ajax файла HTML и Горе jQuery

Чтобы сделать это правильно, вам нужен stack для поддержания открывающих скобок. Когда вы получите открывающую скобку, положите ее на стопку. Когда вы получите закрывающую скобку, вытолкните верхнюю открывающую скобку из стопки и убедитесь, что они совпадают. Когда вы закончите анализ строки, stack должно быть пустым.

enum Balance {
    case balanced
    case unbalanced(String)
}

func checkBalance(_ str: String) -> Balance {
    var stack = [Character]()

    for char in str {
        if ["{", "(", "["].contains(char) {
            stack.append(char)
        } else if ["}", ")", "]"].contains(char) {
            if let top = stack.popLast() {
                switch (top, char) {
                case ("{", "}"), ("(", ")"), ("[", "]"):
                    break
                default:
                    return .unbalanced("mismatched braces: \(top), \(char)")
                }
            } else {
                return .unbalanced("unexpected close brace: \(char)")
            }
        }
    }
    if !stack.isEmpty {
        return .unbalanced("missing \(stack.count) closing braces")
    }
    return .balanced
}

Тесты:

checkBalance("{ [ ( ) ] }")
.balanced
checkBalance("{ [ ] { } }")
.balanced
checkBalance("[(")
[ 116]
checkBalance("{ [ ( ) }")
.unbalanced("mismatched braces: [, }")
checkBalance("}")
.unbalanced("unexpected close brace: }")

Примечание:

[ 1122] checkBalance возвращает перечисление типа Balance. Чтобы проверить, равен ли результат .balanced, вы должны сделать это следующим образом:

if case .balanced = checkBalance("() { [ ] }") {
    // handle balanced case
} 

или можете использовать switch:

switch checkBalance("() { [ ] }") {
case .balanced:
    // do something if balanced
case .unbalanced(let reason):
    print("Not balanced: \(reason)")
}
11
задан Superdumbell 12 January 2009 в 20:14
поделиться

2 ответа

Из ссылки, которую OP отправил с ответом:

При загрузке XML-файлов локально, например, CD-ROM и т.д., данные, полученные Internet Explorer, являются простым текстом, не text/xml. В этом случае используйте параметр типа данных, чтобы загрузить XML-файл как текст и проанализировать возвращенные данные в функции успеха

 $.ajax({
   url: "data.xml",
   dataType: ($.browser.msie) ? "text" : "xml",
   success: function(data){
     var xml;
     if (typeof data == "string") {
       xml = new ActiveXObject("Microsoft.XMLDOM");
       xml.async = false;
       xml.loadXML(data);
     } else {
       xml = data;
     }
     // Returned data available in object "xml"
   }
 }); 

Это работало на меня также.

8
ответ дан 3 December 2019 в 10:45
поделиться

Просто мысль: Я помню, что некоторые ПОЛУЧАЮТ отказы запросов с IE. Вы попытались ОТПРАВИТЬ его?

0
ответ дан 3 December 2019 в 10:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: