2014-02-06 83 views
0

這是一個簡單的函數,我用它從XML文檔中檢索文本。它在每個瀏覽器中都能夠完美運行,但它經常(並非總是)在iPad上的Safari上失敗。

當出現故障時,它返回一個412狀態碼與消息

未能加載資源:服務器用的412狀態響應(前提條件失敗)。

當我在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頭 你可以停在jQuery的AJAX調用不使用數據類型和解碼XML在JavaScript端 – chings228

回答

0

看起來像mod_security問題。

把這個在您的.htaccess文件:

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

另一個問題可能是,如果沒有數據發生變化(感謝http://avnwx.blogspot.co.at/2011/10/debuggers-lie.html指出這一點!),apache會回覆狀態碼412而不是304(未修改)的發佈請求。

爲了確保每一個崗位的要求是不同的,我只是添加 '?uuid=' + new Date().getTime() 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