如何获取jquery.Ajax与“;投掷1<不要邪恶>"在json响应前面
How do I get jquery.Ajax to work with "throw 1; <dont be evil>" in front of json responses?
Google向json响应返回Unparsable Cuft,如下所示:
throw 1; <dont be evil> { foo: bar}
- 我当前的web应用程序使用jQuery.Ajax来检索JSON数据。应该如何修改它们以使用有效数据
这是一个相关的演示
您可能应该从响应中删除开头部分:
$.ajax(url, {
dataType: "jsonp text",
success: function(data) {
var jsonString = data.replace(/^throw 1; <dont be evil> /, "");
var responseObject = $.parseJSON(jsonString);
// do something with responseObject
...
}
}
更新:
为了使重写在每个Ajax调用中都可用,您还可以在jQuery:中注册一个全局Ajax转换器
$.ajaxSetup({
converters: {
"text cleanedjson": function(data) {
var jsonString = data.replace(/^throw 1; <dont be evil> /, "");
return $.parseJSON(jsonString);
}
}
});
$.ajax(url, {
dataType: "jsonp cleanedjson",
success: function(responseObject) {
// do something with responseObject
...
}
});
您仍然需要在请求选项中指定您定义的dataType
。
更新2:如果您需要调整现有调用以自动进行响应清理,您可以修补jQuery的ajax
实现,以便在某些情况下自动使用转换器:
// store reference to original implementation
$._ajax_original = $.ajax;
// redefine jQuery's ajax function
$.ajax = function(url, settings) {
if (… your test for applicability here (e.g. an url check) …) {
settings.dataType = "jsonp cleanedjson";
}
return $._ajax_original(url, settings);
};
请注意,在加载jQuery之后以及进行第一次Ajax调用之前,必须包含此重新定义。您可能还需要考虑,也可以在没有单独的url
参数的情况下调用$.ajax
。。。
我利用$.ajaxSetup
方法简单地实现了这一点:
http://api.jquery.com/jQuery.ajaxSetup/
以及使用转换器:
$.ajaxSetup({
converters: {
"text json": function (stringData) {
return jQuery.parseJSON(stringData.replace("for(;;);", ""));
}
}
});
这样做的目的是利用每个ajax调用,并动态进行必要的转换/替换。它本质上是将您的对象读取为"文本",替换不可解析的cruft,并吐出一个新的json对象。
效果很好。我设置了它并忘记了它,它不会干扰任何未受污染的json。
相关文章:
- 在<页眉>标签
- 如何更改<svg>标记为<img>用js标记
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- Ajax文件加载和<输入>文件加载
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 链接所有<a>Meteor
- 在<输入类型=“;文件“/>
- Div根据<选择>菜单
- 可以<脚本类型=“;text/javascript”>window.location=“/"</
- 如何首先设置样式<td>表中包含在窗体中的元素
- 通过点击<李>在jQuery中
- 正在检测导航到<a name=“;最新主题”></a>
- 如何更改<选择>使用angularJS从控制器获得的值
- 通过具有IE<11
- 如何附加<ul><李>元素位于某个特定条件的父元素列表之间
- 图像可以从源<img src=""/>.TEXT可以在没有javascript的情况下从外部
- 应为标识符,而看到'<'
- 如何设置默认<ui视图>在另一<ui视图>
- 使用Javascript,如何显示<tr>在另一<tr>悬停时,隐藏第二个<tr>
- 如何获取jquery.Ajax与“;投掷1<不要邪恶>"在json响应前面