2014-02-06 5 views
0

Это простая функция, которую я использую для извлечения текста из XML-документа. Он работает безупречно в каждом браузере, но часто (не всегда) не работает Safari на iPad.

Когда это не удается, он возвращает код состояния 412 с сообщением

Не удалось загрузить ресурс: сервер ответил со статусом 412 (Precondition Failed).

Когда я тестирую iPad, я нахожусь в беспроводной сети, в то время как мое другое тестирование выполняется через проводное соединение. Я тоже попробовал это на своем телефоне, и у меня не было никаких проблем. Тот факт, что ошибка возникает только иногда, заставляет меня задаться вопросом, связано ли это с каким-то гоночным состоянием или сроком, но я здесь полностью проигрываю.

function getText(page, ID){ 
    if(languageText == null){ 
     url = directory + "/text/" + language + "/text.xml"; 
     $.ajax({ 
      url: url, 
      type: "post", 
      dataType: "xml", 
      async: false, 
      success: function(data, status, jqXHR){ 
       console.log(data); 
       languageText = $(data); 
      }, error: function(jqXHR, textStatus, errorThrown){ 
       console.log(errorThrown); 
       console.log(jqXHR); 
      } 
     }); 
    } 
    var selector = "page[id='" + page + "'] text[id='" + ID + "']"; 
    result = languageText.find(selector).text(); 
    return result; 
} 
+0

исходный файл не может включать в себя XML-заголовок вы можете остановить не использовать DATATYPE в Jquery Ajax вызова и декодирования XML в стороне яваскрипта – chings228

ответ

0

выглядит как проблема mod_security.

это в вашем файле .htaccess:

<Files text.xml> 
SecFilterInheritance Off 
</Files> 
1

Еще одна проблема заключается в том, что apache отвечает на запрос на отправку с кодом состояния 412 вместо 304 (не изменен), если данные не были изменены (спасибо http://avnwx.blogspot.co.at/2011/10/debuggers-lie.html за указание этого!).

Чтобы убедиться, что каждый пост запрос отличается я просто добавить '?uuid=' + new Date().getTime() в URL запроса AJAX (не размещены данные!).

Пример запроса:

jQuery.ajax({ 
    cache: false, 
    data: { 
     start: 1, 
    }, 
    url: 'http://127.0.0.1/test.php?uuid='+new Date().getTime(), 
    success: function(){ alert('success'); } 
} 
+0

Большое спасибо за это! – 11teenth

Смежные вопросы