使用jQuery1.5将请求发送为jsonp,将响应解释为文本



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

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

  • 在Firefox中,我收到一个"XML标记名称不匹配(预期为META)"错误。在chrome中,我得到一个"Uncaught SyntaxError Unexpected token<",两者都指向与我的AJAX请求相对应的文件。错误回调中的错误字符串为"parserror"
  • 我无法进行正常的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,但现在它似乎有点过时了)

相关内容

  • 没有找到相关文章

最新更新