在Android设备中跨域ajax请求失败

时间:2013-03-18 15:49:16

标签: ajax wordpress jquery cordova jquery-mobile

我有一个非常基本的jqm / phonegap应用程序

这是我的HTML

<html>
<head>
<title>jQuery Mobile Web App</title>
<link href="jquery-mobile/jquery.mobile-1.0.min.css" rel="stylesheet" type="text/css"/>
<link href="style.css" rel="stylesheet" type="text/css">
<script src="jquery-mobile/jquery-1.6.4.min.js" type="text/javascript"></script>
<script src="jquery-mobile/jquery.mobile-1.0.min.js" type="text/javascript"></script>

</head>
<body >
<div data-role="page" id="home"  >
  <div data-role="header">
    <h1>p</h1>
  </div>
  <div data-role="content" style="text-align:right" id="c1">


  </div>
  </div>
</div>
</div>

这是我的js代码,它放在html代码的主体中

 <script>

    function get_news_list(id , link_ , refresh_ ){

        jQuery.support.cors = true;

        $.ajax({
        url :  link_ ,  
        success:function(data){
            $('#c1').html(data);

                        } ,
        error : function(data) {

            alert(data.toSource);

            }
        });
    }

  get_news_list('latest' , 'http://pnup.ir/?feed=json' , refresh_);

    </script>

当我将其作为网页运行时,我得到了

此警报    如果是firefox

function toSource() {
    [native code]
}

in chrome

  undefined 

我认为这是确定的,因为它是一个跨域的ajax请求,它在Web浏览器中失败(尽管在firebug中它的状态是好的200它只是不返回任何响应) 但是当我在我的Android设备上测试时,我会得到相同的undefined。我认为跨域ajax请求一旦我作为Android设备中的应用程序符文它不是问题?

我错过了什么吗?我应该使用jsonp吗?它是一个wordpress网站和json feed插件,它的提要在json中可用,但获得jsonp feed会是一场噩梦......至少我不知道怎么做!

1 个答案:

答案 0 :(得分:1)

我最近在我的一个phonegap + jquerymobile项目中实现了jsonp,我遇到了同样的问题,但是我使用了asp.net作为我的服务

调用下面的服务为我工作所有你需要做的就是添加?fnCallBack =?在网址的末尾

$.ajax({        
        url : link_+'?fnCallBack=?',
        contentType : "application/json; charset=utf-8",
        dataType : "json",
        jsonp : 'json',
        cache : false,
        success : function(result) {
            if (result != 'Error') {
                var valX = JSON.stringify(result);
                valX = JSON.parse(valX);
            } else {
                navigator.notification.alert("An error occured, Please try later");
            }
        }
    });

并且在服务器端发送json响应时,只需像这样添加fnCallBack

        string jsoncallback = context.Request["fnCallBack"];
        context.Response.Write(string.Format("{0}({1})", jsoncallback,jsonData));

这样我解决了我的跨域问题,所以希望你能从这个

中获得线索