我正在 MVC 中创建一个项目,其中涉及使用 AJAX 从外部 url 获取 XML。问题是我不能做这样的事情:
$.ajax({
url: url,
data: data,
success: success,
dataType: dataType
});
因为我访问的 xml 站点是公共(public)的,所以我收到 XMLHttpRequest 相同域策略错误。我的解决方案是运行服务器端脚本(例如 PHP?)来获取 XML 信息,然后将其转发给我的程序(一个具有每 15 秒更新一次的标记数据的 Google map 项目)使用。
我的问题是,如何将脚本合并到我的项目中以获取 XML?我可以使用 PHP 吗? ASPX?我从来没有做过这样安静的事情,所以我不知道这一切是如何结合在一起的。
为了澄清,这就是我正在做的事情:
public class HomeModel
{
public string XmlData { get; set; }
public void GetXml()
{
XmlDocument doc1 = new XmlDocument();
doc1.Load("http://www.nfl.com/liveupdate/scorestrip/ss.xml");
XmlData = doc1.InnerXml;
}
}
但这行不通,因为我想使用 AJAX 来获取 XML 数据,这样我就不必刷新整个页面。
最佳答案
嗯,我想这里的问题更多的是道德问题。您尝试访问数据的网站所有者不希望您直接访问该数据并将其重新呈现给另一个客户端。因此会出现相同域策略
错误。
您仍然可以在服务器端下载该文件。 IE。在 C# 中,您可以使用 HttpClient
.
HttpClient client = new HttpClient();
string file = await client.GetStringAsync('http://www.example.com/myfile.xml');
但是,如果您实际控制提供 xml 文件的服务器,则只需在服务器上启用 xml 文件的 cors(跨域资源共享)即可。
编辑
根据您的编辑,您希望创建一个调用您的代码的 MVC 操作。然后,您可以在自己的服务器端代码上进行 ajax 调用,从而消除 cors 问题。
网址 www.mysite.com/MyXML
现在将从 http://www.nfl.com/liveupdate/scorestrip/ss.xml
返回文件。
public class MyXMLController : Controller
{
public ActionResult Index()
{
XmlDocument doc1 = new XmlDocument();
doc1.Load("http://www.nfl.com/liveupdate/scorestrip/ss.xml");
XmlData = doc1.InnerXml;
return Content(doc1.InnerXml, "text/xml", System.Text.Encoding.UTF8);
}
}
注意:从道德上讲,我不同意这种方法。
关于javascript - 使用 ASP.NET MVC 项目运行脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28633755/