gpt4 book ai didi

jquery - 使用 jQuery 1.5 以 jsonp 形式发送请求,将响应解释为文本

转载 作者:行者123 更新时间:2023-12-03 23:01:50 25 4
gpt4 key购买 nike

简短的问题:有没有办法向服务器发出 jsonp 请求,捕获请求,但不将其解析为 javascript?我在 jQuery 1.5 中使用 dataType: "jsonp text"但它不起作用。

我正在尝试使用 jsonp 通过 AJAX 访问跨域 URL。问题是另一个域(我大学的目录列表)非常旧,我怀疑服务器是否支持 jsonp。

  • 在 Firefox 中,我收到“XML 标记名称不匹配(预期 META)”错误。在 chrome 中,我收到一个“Uncaught SyntaxError Unexpected token <”,两者都指向与我的 AJAX 请求相对应的文件。错误回调中的错误字符串是“parsererror”。
  • 我无法进行正常的 AJAX 调用 - 当我将数据类型更改为“文本”或将其全部删除时,另一个域会提示用户未经过身份验证并重定向到登录页面 - 即使我已经登录浏览器端。当 dataType 为 jsonp 时,不会发生这种情况。
  • 我知道服务器需要支持 JSONP,而且我认为不需要,但是当我将 dataType 更改为 JSONP 时,我可以看到响应页面资源显示在 Chrome 和 Firefox 中 - 所以服务器实际上发送对浏览器的响应(静态 HTML 网页 + 一些 java 脚本)——其中包含我想要获取的数据。
  • 问题是 jQuery 尝试将响应解析为 javascript,但失败了(因为它不是 javascript)。所以数据最终会出现在浏览器中——我只需要访问它!
  • 使用 dataType: "jsonp text"应该指示发送 jsonp 请求并将响应解释为文本,这没有什么区别 - 仍然是一个解析错误。

我想要的是:一种以纯文本形式访问 jsonp 请求响应的方法。或者,如果我可以访问失败的 jsonp 请求的原始响应——那也可以。

提前致谢!

代码:

ajax_url = 'https://somesite/?searchTerm='+query+'&searchType=lastname';
var jqxhr = $.ajax({type:"GET",
url: ajax_url,
dataType:"jsonp text",
callback: "whatever",
success:function(responseData) {
$('div#content').text( responseData.slice(0, 100) );
dbg(responseData.slice(0,100));
}})
.success(function() { alert("success"); })
.error(function(obj, errStr) { alert("error"); dbg("error: " + errStr + "test: " + test.responseText + this.responseTxt);})
.complete(function() { alert("complete"); });

最佳答案

您想要实现的目标是行不通的:只有当服务器将响应正确嵌入到 JavaScript 函数调用中时,才能使用 jsonp。

即使服务器确实将文件发送到浏览器,由于安全限制,您将无法访问它:您所能做的就是将所述数据作为脚本(带有脚本标签)执行或将其用作样式表(使用链接标记),但如果来自另一个域,您将永远无法检查原始文本中的响应。

我想您尝试直接获取 xml 格式的数据,但失败了(意味着该网站不支持 CORS )。如果您无法更改服务器端代码,那么您只有两种选择:

  1. 在您自己的服务器上创建一个代理来隧道响应(您的服务器端脚本发出实际请求并将其发送到浏览器):然后从客户端的角度应用同域,您将能够以 XML 形式请求数据,
  2. 使用 flash 绕过浏览器的安全性(您可以使用 flXHR,但现在似乎有点过时了)。

关于jquery - 使用 jQuery 1.5 以 jsonp 形式发送请求,将响应解释为文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9239015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com