2012-01-28 50 views
2

我想在Windows Phone 7.5上使用下面的代碼與jQuery。每次我嘗試爲xml創建ajax請求時,都會從錯誤處理程序中返回「Access is Denied」。 JSONP不會在這種情況下工作,不幸的是,因爲我需要的數據只有XML。我不知道我會如何解決這個問題。Windows Phone 7/IE9 jQuery ajax「訪問被拒絕」

編輯:我應該指出,代碼適用於Chrome和Safari。但是我沒有Windows機器來測試IE。 編輯2:在IE9上測試出現相同的錯誤。

的javascript:

function loadData(index) { 
$.support.cors = true; 
$.mobile.allowCrossDomainPages = true; 
    $.ajax({ 
     url: "http://foo.bar/some.xml", 
     dataType: "xml", 
     success: parseData, 
     error: function(XMLHttpRequest, textStatus, errorThrown) { 
     alert("Status: " + textStatus); alert("Error: " + errorThrown); 
     } 
    }); 
}; 

PHP代理來獲取XML

<?php 
header('Content-type: text/xml'); 
header("Access-Control-Allow-Origin: *"); 
header("Access-Control-Allow-Methods: POST, GET, OPTIONS"); 

$intme = date('YmdHis'); 
$start = $_GET['ind']; 
$url = "http://some.data.source/data.xml"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$output = curl_exec($ch); 
curl_close($ch); 
echo $output; 
?> 
+0

你在用什麼?手機差距,在本地應用程序內製作webapp或webcontrol? – 2012-01-28 21:05:11

+0

只是普通的jQuery的webapp。 – exiva 2012-01-28 22:45:33

回答

0

不知道怎麼樣純JQuery的,但是當我與PhoneGap的工作,我面臨着同樣的問題,這樣寫:

在發出AJAX請求之前,您必須允許跨域請求和核心支持,方法是設置:

jQuery.support.cors = true; 
$.mobile.allowCrossDomainPages = true; 

那些必須以特定-PhoneGap的功能「DeviceReady」來設置,例如:

document.addEventListener('deviceready', function() { 
      jQuery.support.cors = true; 
      $.mobile.allowCrossDomainPages = true; 
      $.ajax({ 
       url: "www/about.txt", 
       dataType: 'text' 
      }).done(function (result) { 
        alert(result); 
       }); 
      }); 

2.2。網址

製造的Windows Phone 8應用導向,在AJAX請求您必須指定完整路徑的資源,例如: 網址: 「WWW/about.txt」,

製造的Windows Phone 8應用導向,在AJAX請求您不得指定資源的完整路徑,例如: url:「about.txt」,

2.3。源文件擴展名

請小心使用未知擴展名文件,如模板擴展名* .tpl或類似文件。有時AJAX不喜歡它們,我建議使用簡單的* .txt和* .html擴展名。

3的getJSON

不知何故$ .getJSON不會在Windows Phone,例如工作:

$.getJSON('www/jsonfiles/jsonfile.txt', 
       function(data, status, jqXHR) { 
       if(status == "success") { 
        alert(data); 
       } 
       }); 

你可以像這樣用AJAX請求更換:

​​