简短的问题:有没有办法向服务器发出 jsonp 请求,捕获请求,但不将其解析为 javascript?我在 jQuery 1.5 中使用 dataType: "jsonp text" 但它不起作用。
我正在尝试使用 jsonp 通过 AJAX 访问跨域 URL。问题是另一个域(我大学的目录列表)非常旧,我怀疑服务器是否支持 jsonp。
- 在 Firefox 中,我收到“XML 标记名称不匹配(预期 META)”错误。在 chrome 中,我收到一个“Uncaught SyntaxError Unexpected token
- 我无法进行正常的 AJAX 调用 - 当我将数据类型更改为“文本”或将其全部删除时,另一个域会抱怨用户未经过身份验证并重定向到登录页面 - 即使我已经登录浏览器端。当 dataType 为 jsonp 时,不会发生这种情况。
- 我知道服务器需要支持 JSONP,而且我认为不需要,但是当我将 dataType 更改为 JSONP 时,我可以看到响应页面资源显示在 Chrome 和 Firefox 中 - 所以服务器实际上将响应发送到浏览器(一个静态 HTML 网页 + 一些 java 脚本)——其中包含我想要获取的数据。
- 问题是 jQuery 尝试将响应解析为 javascript,但失败了(因为它不是 javascript)。所以数据最终会出现在浏览器中——我只需要访问它!
- 使用 dataType: "jsonp text" 应该指示发送 jsonp 请求并将响应解释为文本没有任何区别 - 仍然是解析错误。
我想要的是:一种以纯文本形式访问 jsonp 请求响应的方法。或者,如果我可以访问失败的 jsonp 请求的原始响应——那也可以。
提前致谢!
Code:
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 http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing)。如果您无法更改服务器端代码,那么您只有两种选择:
- 在您自己的服务器上创建一个代理来隧道响应(您的服务器端脚本发出实际请求并将其发送到浏览器):然后从客户端的角度应用同域,您将能够请求数据为 XML,
- 使用 flash 绕过浏览器的安全性(您可以使用flXHR http://flxhr.flensed.com/但现在看来有点过时了)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)