Windows Phone 7 / IE9 jQuery ajax“访问被拒绝”

时间:2012-01-28 20:46:52

标签: ajax internet-explorer windows-phone-7 jquery

我正在尝试在Windows Phone 7.5上使用以下代码和jQuery。每次我尝试为xml发出ajax请求时,我都会从错误处理程序返回“Access is Denied”。不幸的是,JSONP无法在这种情况下工作,因为我需要的数据仅在XML中。我不确定如何解决这个问题。

编辑:我应该指出,代码在Chrome和Safari上运行良好。我没有在IE上测试的Windows机器。 编辑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;
?>

1 个答案:

答案 0 :(得分:0)

不知道普通的JQuery怎么样,但是当我使用phonegap时,我遇到了同样的问题并写了这个:

在发出AJAX请求之前,您必须通过设置:

来允许跨域请求和核心支持
jQuery.support.cors = true;
$.mobile.allowCrossDomainPages = true;

必须在特定的电话间隙功能“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请求中你必须指定资源的完整路径,例如:                     url:“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请求,如下所示:

 $.ajax({
        url: 'www/jsonfiles/jsonfile.txt',
        dataType: 'text'
    }).done(function (result) {
        Alert( JSON.parse(result));
    });