2012-01-28 56 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请求更换:

​​