如何在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跨域? 的相关文章

  • 实现悬停信息框

    我有一个日历 当用户将鼠标悬停在单元格上时 会出现一个很大的信息框 其中包含该日期的详细信息 虽然当用户离开时使信息框消失 但我遇到了一些麻烦 我基本上想要它 这样当鼠标光标移出信息框隐藏的日历单元格时 它就会消失 但我遇到了麻烦 因为mo
  • 在多个动态添加的表单上初始化 jQuery validate() 函数

    有人建议最好初始化一个 form validate 在页面加载而不是点击事件上运行 jquery form validate 插件仅允许在输入更改时提交 https stackoverflow com questions 10984196
  • Text::平衡和多行 xml

    看来我有点失落了 我需要解析一个大的 大约 100 mb 且相当难看的 xml 文件 如果我使用parsefile 它返回错误 文档元素后的垃圾 但它会很乐意解析文件的较小元素 所以我决定将文件分解为元素并解析它们 由于不鼓励使用正则表达式
  • 搜索多维数组 JavaScript

    我有一个如下所示的数组 selected products 0 r1 7up 61 Albertsons selected products 1 r3 Arrowhead 78 Arrowhead selected products 2 r
  • JQuery 删除和内存泄漏

    我正在开发一个游戏 我看到了很多内存消耗 我使用jquery animate 动画完成后 我 remove 元素 我的问题是 从 dom 树中删除一个元素后 对象还存在记忆中吗 Javascript 是一种垃圾收集语言 这意味着当没有代码保
  • 雷达扫描仪旋转效果

    我正在尝试找出一个可能的解决方案 如何使用 jQuery 和 CSS 创建雷达扫描仪效果 本质上 半透明三角形光束将围绕 div 的中点旋转 这可以用 jQuery 实现吗 还是我应该采取其他方法 我不喜欢使用 gif 动画 你不需要 jQ
  • 如何更换HXT中的节点?

    给定一个示例 xml 文件
  • jQuery:如果使用 html() 从 DOM 中删除事件处理程序,是否会从对象中删除事件处理程序

    我担心应用程序中的内存泄漏 因为我经常使用 jquery 的 html 方法来替换 DOM 中的内容 我只是想确保这些事件侦听器不会停留在浏览器内存中 我搜索了 jquery 文档没有明确的答案 有人知道吗 多谢你们 是的 他们是 如果你使
  • RegisterForEventValidation 只能在 Render 期间调用

    我有一个将从 jquery ajax 调用的 webmethod WebMethod public string TestMethod string param1 string param2 StringBuilder b new Stri
  • mouseover 函数在队列中多次出现

    我有这段代码 可以在鼠标悬停时使一个 div 淡出另一个 div 并在光标离开查看区域时淡出 例子 http jsfiddle net 3vgbemgu http jsfiddle net 3vgbemgu under hover func
  • VBA / HTML / jQuery 选择自动完成 - 在列表中选择

    我正在尝试使用 Excel 中的 VBA 在网站的列表中选择一个值 这不是一个 正常列表 该网站使用 jQuery 选择自动完成 如下所示 example http davidwalsh name demo jquery chosen ph
  • 记录骆驼路线

    我的项目中有几个 Camel 上下文 如果可能的话 我想以逆向工程方式记录路线 因为我们希望保持与上下文相关的文档最新 最好的方法是什么 我们倾向于预先实际设计路线 并使用来自EIP book http www eaipatterns co
  • 在网页上的文本框中键入内容时删除所有空格

    我如何在用户打字时即时删除输入到文本框中的空格 function var txt myTextbox var func function txt val txt val replace s g txt keyup func blur fun
  • jquery 验证错误位置

    这看起来很简单 但我无法弄清楚 我正在使用 jquery 验证插件 我验证所有文件 但我想要的是在输入文本行中显示验证消息警报 例如在电子邮件输入中 请填写电子邮件地址 但现在它出现在所有字段下 在我的html中
  • Jquery从下拉列表中获取所选值的id

    我有一个下拉列表 可以从数据库获取值 如下所示 get getJobs function jobs seljobs jobs var i 0 jobs forEach function n alert job id n id 32 67 4
  • jquery window.open 在 ajax 成功中被阻止

    尝试在我的 ajax 成功调用中打开一个新的浏览器窗口 但是 它被阻止为弹出窗口 我做了一些搜索 发现用户事件需要绑定到 window open 才能避免这种情况发生 我还找到了这个解决方案 您可以在 ajax 之前打开一个空白窗口 然后在
  • 如何通过jquery更改元素的类名

    div class bestAnswerControl div class IsBestAnswer div div 我想补充一下 bestanswer some attribute 我想更换class IsBestAnswer div 到
  • 当用户单击链接时,如何记录 MixPanel 事件?

    当用户单击某种类型的链接时 我试图在 MixPanel 中记录一个事件 我正在使用 JQuery 不引人注意地完成此操作 据我所知 我需要添加一个回调函数 以便在记录事件后将用户带到 URL 这是我正在使用的代码 不幸的是
  • 如何在jquery中获取保存时间和当前时间的差异?

    我想在 javascript 或 jquery 中获取保存时间和当前时间之间的时差 我节省的时间看起来像Sun Oct 24 15 55 56 GMT 05 30 2010 java中的日期格式代码如下 String newDate 201
  • JAXB - 列表<可序列化>?

    我使用 xjc 制作了一些课程 public class MyType XmlElementRefs XmlElementRef name MyInnerType type JAXBElement class required false

随机推荐

  • 如何限制用户使用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 是如何促进的会有