2012-03-27 81 views
0

我已成功申請到通過AJAX一個Basecamp的XML文件,但它拋出一個錯誤(谷歌瀏覽器):麻煩與「未捕獲的SyntaxError:意外的標記<」

資源解釋爲其他但使用MIME類型傳輸未定義。 Uncaught SyntaxError:意外的令牌<

Firefox也給我一個錯誤,但它是一個完全不同的。我無法修改XML文件,並且XML文件結構是正確的。我試過並搜索,但可以找出什麼是錯的。任何幫助將不勝感激。

這裏是jQuery代碼:

$(document).ready(function() { 
    $.ajaxSetup({accepts:'text/xml',cache:false}); 
    $.ajax({ 
      type: 'GET', 
      dataType: 'jsonp', 
      contentType: 'text/xml', 
      mimeType: 'text/xml', 
      crossDomain: true, 
      url: url, 
      beforeSend: function(xhr) { 
        var bytes = Crypto.charenc.Binary.stringToBytes(username+":"+password); 
        var base64 = Crypto.util.bytesToBase64(bytes); 
        xhr.overrideMimeType("text/xml;charset=UTF-8"); 
        xhr.setRequestHeader("Authorization", "Basic " + base64); 
      }, 
      complete: function(xhr, status) { 
        if (status === 'error' || !xhr.responseText) { 
         $('.result').html('<p><strong>Error:</strong> ' + status + "</p><p><strong>Response Text</strong>:<br /><pre>"+xhr.responseText+"</pre></p>"); 
        } else { 
         var data = xhr.responseText; 
         $('.result').html("<pre>"+data+"</pre>"); 
        } 
      } 
      }); 
    }); 
+0

要求輸入密碼.. – Niko 2012-03-27 23:03:38

回答

1

一般來說,問題是,你要求不支持JSONP的資源,因此它返回的XML文件,而不是一個腳本。當您在ajax請求中指定JSONP時,該函數需要用javascript封裝數據,否則它將無法工作。

當然,如果沒有JSONP,您不能直接請求XML文件,因爲出於安全考慮,瀏覽器不允許跨域訪問腳本以外的其他資源。

+0

謝謝!有沒有辦法用JSONP請求XML? – elin15 2012-03-28 00:38:15

+0

正如我所說,你不能直接請求JavaScript以外的跨域資源,所以如果資源的提供者(basecamp在這裏)確實支持JSONP,它將xml包裝成一個JavaScript對象,那麼你可以得到該對象並從中提取xml內容。或者您可以設置某種代理,使您能夠從頁面請求相同的域中的資源,然後您可以直接請求xml而不會出現問題。 – 2012-03-28 01:12:28

相關問題