如何在jQuery中解析XML跨域?

2023-12-14

从不同的服务器/域解析 XML 时,如何解决跨域问题?有人可以给我举个例子吗?该示例不必仅限于 jQuery,因为 JavaScript 也足够了。


要充分理解为什么pure跨域 XML 不起作用,首先了解一下跨域 JSON 是如何促进的会有所帮助。

首先,让我们看看当您在 jQuery 中发出 AJAX 请求时会发生什么:

$.ajax({
    url: '/user.php?userId=123',
    success: function(data) {
        alert(data); // alerts the response
    });

在上面的示例中,AJAX 请求是相对于域发出的。我们知道,如果我们尝试在路径之前添加不同的域,请求将失败并出现安全异常。

但是,这并不是说浏览器不能向另一个域发出请求。以下是您可能熟悉的示例:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

根据我们对如何在页面上导入 JavaScript 的了解,我们发现可以加载另一个域中存在的资源!

JSONP 是一个利用这些知识的概念。 JSONP 代表“带有填充的 JSON”,它的成功取决于 JavaScript 对象可以使用字符串表示法来表达,以及 JavaScript 脚本标签可以加载和运行来自外部域的内容。

在底层,jQuery 的 JSONP 看起来像这样,尽管可能不准确:

// programmatically load a script tag on the page using the given url
function loadRemoteData(url) {
    var script = document.createElement("script");
    script.setAttribute("type","text/javascript");
    script.setAttribute("src", url);
    document.getElementsByTagName("head")[0].appendChild(script);
}

另外,在页面的某个地方,我们定义了一个回调处理程序:

function processData(jsonResult) {
    alert(JSON.stringify(jsonResult)); //alert the JSON as a string
}

在此,我们提出要求:

// make a request for the data using the script tag remoting approach.
loadRemoteData("http://example.com/users.php?userId=123&callback=processData");

为了使其正常工作,我们的 PHP 脚本必须以 JSON 格式返回数据,并且还必须以 JavaScript 函数名称的形式在字符串周围添加“填充”,我们可以将其作为参数传入(即“回调”) )

因此,如果我们在 Firebug 或 Chrome NET 选项卡中查看,服务器的响应可能如下所示:

processData( { "userId" : "123" , "name" : "James" , "email" : "[email protected]" } );

因为我们知道 JavaScript 内容一旦下载就会运行,我们的processData我们之前定义的函数会立即被调用,并将 JSON 字符串作为参数传递。然后它会收到警报,使用 JSON.stringify 将对象转换回字符串。

由于它是一个对象,我还可以访问它的属性,如下所示:

function processData(jsonResult) {
    alert(JSON.stringify(jsonResult)); //alert the JSON as a string

    // alert the name and email
    alert("User name is " + jsonResult.name + " and email is " + jsonResult.email);
}

最后,让我们进入主要问题:是否可以使用JSONP来获取XML,或者我们可以跨域解析XML吗?正如其他人指出的那样,答案是否定的,但让我们通过一个例子来看看为什么:

processData(<?xml version="1.0"><user><userid>12345</userid><name>James</name><email>[email protected]</email></user>);

现在,如果将原始 XML 传递到函数中会发生什么?它会崩溃,因为 JavaScript 无法将 XML 转换为 JSON。

但是,假设我们将 XML 放在引号中:

processData("<?xml version="1.0"><user><userid>12345</userid><name>James</name><email>[email protected]</email></user>");

现在,在这个例子中, jsonResult 变量实际上接受一个字符串,我们可以使用它。使用一些 JavaScript XML 解析实用程序,我们可以将该字符串加载到 XML DOM 解析器中并用它做一些事情!

然而,它不是纯 XML,它仍然是底层的 JavaScript 响应。 PHP 服务器的响应类型仍然是文本/javascript,并且我们仍然使用脚本标记来加载实际上只是纯 JavaScript 的内容。

总之,您可以使用“XMLP”或带填充的 XML(我只是编造的,这不是真的!),但是如果您要经历实际修改响应以返回函数回调的所有麻烦包装器,您也可以将输出转换为 JSON,并让浏览器自动本地处理转换,从而省去使用 XML 解析器的麻烦。

但是,如果由于某种原因以 XML 格式保存数据更容易,您可以修改响应并为其提供 JavaScript 包装器。

我认为这很有用的情况可能是,如果您将来自遗留应用程序的 XML 数据存储在数据库中,并且您使用脚本标记远程处理或 JSONP 调用将其返回到客户端。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在jQuery中解析XML跨域? 的相关文章

  • 如何在jquery中以相反的顺序迭代元素? [复制]

    这个问题在这里已经有答案了 我是jquery的新手 我想知道如何使用each 在jquery中以相反的顺序迭代表单元素 任何帮助 将不胜感激 尝试这个 input get reverse each function
  • 如何仅在最后一个
  • 处给出透明六边形角度?
  • 我必须制作这样的菜单 替代文本 http shup com Shup 330421 1104422739 My Desktop png http shup com Shup 330421 1104422739 My Desktop png
  • Javascript/Jquery:确定用户是否使用鼠标滚轮、滚动条或键盘滚动

    我正在尝试让用户界面正常工作 如果他们使用鼠标滚轮 我需要让它以一种方式滚动 如果他们使用滚动条 我需要让它以另一种方式滚动 如果他们使用键盘 我需要让它以另一种方式滚动 我相信滚轮和滚动条都充当鼠标事件 但是当单击滚动条时我无法让 jav
  • fullCalendar 未显示正确的结束日期

    我正在看调试页面 http jsbin com wukofacaxu edit js outputFullCalendar 官方网站的 我想安排一个活动时间为 22 09 2015 至 30 09 2015 dd mm yyyy 但它只显示
  • 如何从图像输入中获取 xy 坐标?

    我有一个输入设置为图像类型
  • 在剑道组合框中动态添加项目

    如果你们中有人使用过 kendo ui 请告诉我如何在 kendo 组合框中动态添加新项目 我尝试在谷歌和其他地方搜索 我的结论是剑道中没有这样的功能 以供参考 JSBIN http jsbin com ebutaw 2 edit sour
  • 当我使用 bootstrap css 时,工具提示在 fullcalendar 中不起作用

    我正在尝试在我的全日历应用程序中显示工具提示 但如果我包含 bootstrap css 它就不起作用 当我在没有它的情况下运行代码时 一切正常 var calendar new Calendar calendarEl events titl
  • jQuery - 如何检查元素是否存在?

    我知道你可以测试width or height 但是如果元素的 display 属性设置为 none 该怎么办 还有什么其他值可以检查以确保该元素存在 您可以使用length http api jquery com length 查看您的选
  • 使用 XmlWriterSettings 或 XmlWriter 设置引号字符

    我目前有一些直接实例化的代码XmlTextWriter对象 它允许我将引号字符设置为单引号 我需要它来生成 XML 以匹配旧系统 例如 var fred new XmlTextWriter stream encoding fred Quot
  • jQuery:计算数百个元素的点击次数

    这是我在SO 的第一个问题 基本上 我的页面上有大量元素 我想计算并显示用户单击每个元素的次数 但为此我需要为每个元素定义变量 难道就没有更简单的方法吗 对于一个元素 var counter 0 container on click fun
  • 如何使用 ASP.NET 和 jQuery 返回 JSON

    我不知道如何用我的代码返回 JSON 数据 JS function ajax type POST url Default aspx GetProducts data contentType application json charset
  • 选择移动 Web HTML5 框架 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Javascript在底部,函数调用在主体?

    只是一个简单的问题 我遵循将所有 Javascript 文件保留在结束正文之前的文档底部的做法 但是我想在主体中调用一个函数 该函数会出现在 JS include 之前 因此失败 有没有办法让这个功能在不将文件移动到头部的情况下工作 Che
  • 来自外部 XML 的 Android 本地化

    是否可以使用从服务接收到的 XML 在运行时翻译 Android 应用程序 如果可能的话 请有人指出我正确的方向 谢谢 Warning 我读到的所有内容都表明 让您的应用程序更改语言不是一个好主意 因为 Android 框架不支持它 并且可
  • 使用 jquery 和 php 测试表单输入是否为 1 或 2 位整数

    我有一个表单 其中有五个字段全部设置为 maxlength 2 基本上 我希望唯一可以输入的值是一位或两位整数 因为在将值存储在数据库中之前对这些字段执行计算 是否有任何 jquery 不允许用户输入不是整数的值 另外 用 jquery 和
  • jQuery Blur() 在 Chrome 上不起作用

    我在 MacOSX 上运行这个http jsfiddle net q84wv http jsfiddle net q84wv on Chrome最新版本 它不会工作 在 Firefox 上运行时它工作得很好 有什么线索吗 假设您想要aler
  • JQuery DataTable 单元格从行单击

    我正在尝试在 jquery 数据表上实现一个函数 该函数返回单击行的第一列和第四列 我正在遵循这个示例 它允许我操作单击的行http datatables net examples api select single row html ht
  • 常规 JavaScript 可以与 jQuery 混合使用吗?

    例如 我可以采用这个脚本 来自 Mozilla 教程 https developer mozilla org en Canvas tutorial Basic usage
  • 如何清除隐藏上的引导模式

    如何在关闭 隐藏 关闭时清除引导模式 我有以下模态定义
  • 获取淘汰赛中被点击元素的索引

    获取无序列表中单击元素的索引的最佳方法是什么 让我举个例子 假设我有以下 HTML 代码 ul li p p li ul 现在我有以下 javascript 代码来获取索引 self itemClicked function data it

随机推荐

  • 如何限制用户使用datetimepicker输入数据并禁用手动用户输入?

    我想限制用户只能使用日期时间选择器输入数据 下面是我正在使用的代码 div class form group div
  • 查看函数列表时出现呼叫提示/文档字符串?

    我最近刚刚转用 Komodo 进行 Python 编程 到目前为止我很喜欢它 我喜欢输入函数名称 然后输入开括号 它会打开调用提示 文档字符串 我也喜欢输入模块名称 然后输入 它会打开可用函数的列表 我的问题是 当我列出函数列表时 是否可以
  • 使用批处理文件复制目录路径中带有通配符的文件?

    我想要一个批处理文件将文件从每月更改的文件夹复制到另一个文件夹 但 Windows 命令提示符似乎不喜欢通配符 Example 我想复制文件夹media1并包含此目录中的文件 K Eng NAVDB Navigation Databases
  • 使用 Git 进行代码升级

    我试图弄清楚如何将 git 用于多个环境 开发 gt 测试 gt 产品 并进行代码升级 我读了一些有关分支的内容 但不太明白这如何解决我的问题 因为我必须有能力同时且彼此独立地运行所有环境 将非常感谢某种操作方法 这种三层工作流程似乎是很常
  • join 命令遗漏了一行数字

    我有两个文件 我想取出第三列中具有共同数据的行 但它遗漏了一行应该匹配的行 File1 b b b 4 5 3 c c c File2 1 2 3 4 a b c d e f g h i j k l l m n o 输出是 c c c a
  • Silverlight 图表 - 饼图显示图表上的依赖值

    我想在饼图本身上显示相关值 不在图例区域中 我正在使用 Silverlight 4 Silverlight 4 Toolkit 2010 年 4 月 这应该是一个很常见的请求 但我还没有找到解决方案 我该怎么做
  • Angular 4 中的 HashLocationStrategy 和查询参数

    我正在将现有的 Angular 4 应用程序从 PathLocationStrategy 迁移到HashLocationStrategy并且需要保持入口点 url 正常工作 它看起来像www test com param1 123 问题是
  • 我可以只用 CSS 创建这个形状吗?

    我正在为具有特定形状的网页构建一个英雄部分 目前我只是使用图像作为实际部分背景的叠加层 但我希望减少我发出的请求数量 并且会想知道是否可以使用 CSS 完成以下形状 所以黑色部分是实际图像所在的位置 而白色部分是我尝试使用 CSS 构建的部
  • C# 用阴影给图像着色

    我目前正在使用 C 创建一款游戏 并尝试为玩家创建服装 我想做布料设计并让玩家选择颜色 我从 TibiaME tibiame com 的游戏文件中拍摄了照片 它几乎满足了我的要求 我怎样才能用颜色填写这个表格 当我尝试替换某种颜色时 它不起
  • 无法将字符串分配给 Swift 函数内的数组元素

    下面代码中的两个赋值行都给出了这个错误 value T5 与 String 不同 func PrintShoppingList myList Array
  • SQL Server,检查 varchar 是否包含全零

    我需要编写一个函数来检查 varchar 变量值是否全为零 由于变量是 varchar 而不是 int 我有点迷失了 你会怎么办 多谢 您可以使用双重否定LIKE test variable NOT LIKE 0 这表示变量isn t由一定
  • 在同一个 goroutine 中创建的 goroutine 总是按顺序执行吗?

    package main func main c make chan int for i 0 i lt 100 i i i go func c lt i for b lt c println b if b 100 break 上面
  • 如何在 UIScrollView 中加载 UIViewController

    这是我的设置 我有一个UIScrollView在我的主视图控制器之上 我在其中加载多个视图控制器 我还有一个 添加 按钮 它将使用 Push segue 呈现一个新的视图控制器 我希望这个视图控制器也只加载在滚动视图的顶部 而不是整个屏幕
  • 组合器在哪里组合映射器输出 - 在映射阶段或映射减少作业中的减少阶段?

    我的印象是组合器就像作用于本地映射任务的减速器一样 即它聚合单个映射任务的结果以减少输出传输的网络带宽 并且从阅读中Hadoop The definitive guide 3rd edition 我的理解似乎是正确的 摘自第 2 章 第 3
  • Android:将应用程序添加到“将图片设置为”列表

    我正在尝试将我的应用程序添加到 设置为 列表 当我选择图像时 该列表会显示在图库中 如果用户在图库中打开图像 则会有一个按钮set as 当用户点击它时 他会得到一个列表 换句话说 如果他想在我的应用程序中使用该图像 我努力了
  • 重定向+403错误

    我正在寻找一种方法来拥有类似的东西 return HttpResponseForbiddenRedirect reverse view name 重定向到视图 及其名称 但仍然抛出 403 错误的 HttpResponse 我尝试做类似的事
  • 如何构造一个 URL 以使用 jquery lightbox 插件 colorbox 打开页面?

    我正在使用 jquery lightbox 插件 colorbox http colorpowered com colorbox 我希望能够构建一个像 www example com about me html 这样的 URL 它将用户发送
  • 配置php ini文件上传文件

    我有一个用于上传文件的页面 在 htaccess文件我有这个 php value upload max filesize 40M php value post max size 40M 我有一个 img 大小为 1 6 MB 当我尝试上传此
  • 静态单元格内的动态 UITableView

    我读过一些关于静态和动态单元不兼容的线程 但我想知道是否有一些适合我的情况的解决方法 我有一个静态表 由UITableViewController 我在其中一个单元格内放置了一个动态表格 委托和数据源是UITableViewControll
  • 如何在jQuery中解析XML跨域?

    从不同的服务器 域解析 XML 时 如何解决跨域问题 有人可以给我举个例子吗 该示例不必仅限于 jQuery 因为 JavaScript 也足够了 要充分理解为什么pure跨域 XML 不起作用 首先了解一下跨域 JSON 是如何促进的会有