使用Jquery和ajax检索外部xml文件

时间:2013-08-30 17:40:49

标签: android jquery xml ajax

我正在尝试使用带有Ajax的Jquery从xml文件中检索xml信息,如下所示:

function getWeatherXML() {
        // still subjected to CORS issue ...
        alert('Getting weather information...');
        $.support.cors = true;
        $.ajax({
            url: "http://www.weather.gov.sg/wip/pp/rndops/web/rss/3Day_RSS.xml?    callback=?",
            type: "GET",
            dataType: "xml",  //type of data for response
            crossDomain: "true" ,
            jsonpCallback : "myResponse",
             error: function(XMLHttpRequest, textStatus, errorThrown) {
                 alert(textStatus);
                 alert(errorThrown);
              }
      });
    }

    function myResponse(data) {
        alert(data);
    }

但是,我仍然遇到跨源资源共享问题,无论如何我可以解决这个问题?我在我的Android设备上测试,因此我的来源将被声明为null。原因是因为我的webView.loadurl以file:///

开头

谢谢。

1 个答案:

答案 0 :(得分:0)

根据WebView和您的原生Android应用程序绑定在一起的方式,您可以使用Java获取XML,然后将其移至你的Javascript。对于这样的任务,我建议使用droidQuery,因为从现有代码移植它会很简单:

public void getWeatherXML() {
    $.with(this).alert("Getting weather information...");
    //You can either set the type to `XML`, then parse it with Java, or you can just set the type to String, and hand it off to your Javascript
    $.ajax(new AjaxOptions().url("http://www.weather.gov.sg/wip/pp/rndops/web/rss/3Day_RSS.xml")
                            .context(this)
                            .type("GET")
                            .dataType("text")
                            .error(new Function() {
                                @Override
                                public void invoke($ droidQuery, Object... params) {
                                    AjaxError error = (AjaxError) params[0];
                                    droidQuery.alert(error.reason);
                                    droidQuery.alert("Error " + error.status + ": " + error.reason);
                                }
                            })
                            .success(new Function() {
                                @Override
                                public void invoke($ droidQuery, Object... params) {
                                    String xml = (String) params[0];
                                    //TODO hand xml String to your Javascript
                                }
                            }));
}