我在使用IE6从不同域中的服务器检索JSONP响应时遇到了问题.
当我使用JSONP向与网页相同的域中的服务器进行相同的AJAX调用时,所有浏览器(包括IE6)都可以正常运行.但是,当我使用JSONP在域(XSS)之间进行调用时,Internet Explorer 6会锁定.具体来说,CPU达到100%并且永远不会达到"成功"回调.我在域之间取得成功的唯一时间是响应非常短(通常少于150个字节).响应的长度似乎很重要.
我正在使用jQuery 1.2.6.我已经尝试了$ .getJSON()方法和$ .ajax(dataType:"jsonp")方法但没有成功.这在FF3和IE7中运行得很好.我找不到其他有类似问题的人.我认为IE6中的jQuery完全支持这种类型的功能.
非常感谢任何帮助,
安德鲁
这是进行AJAX调用的html页面的代码.制作此文件(和jquery库)的本地副本,并使用IE6进行拍摄.对我来说,它总是会导致CPU出现尖峰而没有呈现任何响应.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Untitled Page</title>
<script type="text/javascript" src="Scripts/jquery-1.2.6.min.js"></script>
<script type="text/javascript" src="http://devhubplus/portal/search.js"></script>
</head>
<body>
<a href="javascript:test1(500, 'wikiResults');">Test</a>
<div id="wikiResults" style="margin-top: 35px;"></div>
<script type="text/javascript">
function test1(count, targetId)
{
var dataSourceUrl = "http://code.katzenbach.com/Default.aspx?callback=?";
$.getJSON(dataSourceUrl, {c: count, test: "true", nt: new Date().getTime()}, function(results) {
var response = new String();
response += "<div>";
for(i in results)
{
response += results[i];
response += " "; …Run Code Online (Sandbox Code Playgroud) 我想从外部来源获得实时汇率,所以我找到了这个很棒的网络服务:
这项服务就像一个魅力,唯一的缺点是它不提供JSONP结果,只提供XML.因此,在尝试使用jQuery $ .ajax()来使用此Web服务时,我们遇到了跨浏览器问题.
所以我找到了Yahoo Query Language,它将结果作为JSONP和mangae返回,以使用其他Web服务并返回结果.这也有效,这是一个示例URL:
http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%3D'http%3A%2F%2Fwww.webservicex.net%2FCurrencyConvertor.asmx%2FConversionRate%3FFromCurrency%3DNOK%26ToCurrency%3DEUR'&format=json&diagnostics=true&callback=cbfunc
Run Code Online (Sandbox Code Playgroud)
这个URL返回JSONP结果并且像魅力一样工作,但是当我在我的代码中使用它时会出现问题:
$.ajax({
type: "GET",
url: urlToWebservice,
contentType: "application/json; charset=utf-8",
dataType: "jsonp",
success: function(data) {
$("#status").html("OK: " + data.text);
},
error: function(xhr, textStatus, errorThrown) {
$("#status").html("Unavailable: " + textStatus);
}
});
Run Code Online (Sandbox Code Playgroud)
当我尝试运行此代码时没有任何反应,我可以在我的Firebug javascript调试器中看到此错误消息:
cbfunc is not defined
Run Code Online (Sandbox Code Playgroud)
cbfunc是围绕JSON响应的容器的名称,但为什么说没有定义?
编辑:
这是我的新代码,但我仍然得到了 cbfunc is not defined
$.ajax({
url: "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%3D'http%3A%2F%2Fwww.webservicex.net%2FCurrencyConvertor.asmx%2FConversionRate%3FFromCurrency%3DNOK%26ToCurrency%3DEUR'&format=json&callback=cbfunc",
dataType: 'jsonp',
jsonp: 'callback',
jsonpCallback: 'cbfunc'
});
function cbfunc(data) {
alert("OK");
}
Run Code Online (Sandbox Code Playgroud)
并且"OK"消息永远不会被触发......
每当我通过jquery对我设置的任何页面(本地或我的服务器)进行JSONP调用时,我得到的只是静默处理.Firebug报告200 OK,响应看起来不错.我设置警报框以在成功或失败时弹出,但都不会出现.我用什么网址似乎并不重要,没有任何东西弹出.
但是,如果我使用twitter json页面,那么我的成功警告框会按预期出现,所以我的回复显然有问题,但我不知道是什么.
作为实验,我复制了twitter json响应并将其上传到我的booroo.com域.它应该是相同的,但仍然没有.我将响应页面上的标题设置为"application/json"和utf-8但仍然没有.
请帮助,我现在花了一整天时间,我不知道还有什么可以尝试.
$.ajax({
dataType: 'jsonp',
// url: 'http://booroo.com/json.asp?callback=?',
url: 'http://twitter.com/users/usejquery.json?callback=?',
success: function () {
alert("Success");
},
error: function(x,y,z) {
alert("error"+x.responseText);
}
});
Run Code Online (Sandbox Code Playgroud)
响应json.asp文件包含以下经典ASP头文件,然后是从twitter复制的json响应(我已经尝试过其他人没有任何成功.)
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
Response.Expires = 0
Response.Expiresabsolute = Now() - 1
Response.AddHeader "pragma","no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "no-cache"
response.ContentType="application/json"
Response.CodePage = 65001
Response.CharSet = "UTF-8"
%>({"test_param":12345});
Run Code Online (Sandbox Code Playgroud) 这是在输入位置时得到纬度和长度的代码.我相信我的代码根据我的知识正确.但是我在进入一个地方后得到一个空白页面.
这是代码:
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var url="http://maps.googleapis.com/maps/api/geocode/json?address=";
var query;
var sensor="&sensor=false";
var callback="&callback=?";
$("button").click(function(){
query=$("#query").val();
$.getJSON(url+query+sensor+callback,function(json){
$('#results').append('<p>Latitude : ' + json.results.geometry.location.lat+ '</p>');
$('#results').append('<p>Longitude: ' + json.results.geometry.location.lng+ '</p>');
});
});
});
</script>
</head>
<body>
<input type="text" id="query" /><button>Get Coordinates</button>
<div id="results"></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 我创建了简单的.aspx页面,它在数据库中查询一些实时数据,然后返回一个JSONP(或者最后一个类似JSONP的)feed. Content-Type application/json; charset=utf-8
这是输出的格式,或多或少:
jsonp1307643489579([
["12345","Text Here","99999","More Text Here","True","False","7/31","1"...],
["12345","Text Here","99999","More Text There",...]
]
Run Code Online (Sandbox Code Playgroud)
然后是一个JQuery .getJSON调用:
var url = "myURL.aspx?id=123&callBack=?";
$.getJSON(url, null, function(msg) { etc etc.
Run Code Online (Sandbox Code Playgroud)
这一切都很好,除了以下.在我的开发环境和本地服务器上,每次都会重新生成新数据.但是在生产Web服务器上,数据顽固地缓存,直到我回收IIS应用程序池(!)
我试过的一些事情没有成功.
1/cache:ajaxSetup中的false不起作用.
2 /关闭web.config中的输出缓存.
2a/OutputCache Location ="无"在aspx页面声明中没有这样做.
3 /在.getJSON(url)调用中添加了随机唯一查询字符串数据.看看我们如何为每个电话追加一个独特的回调参数,我想这无论如何都已经发生了.
知道为什么我的Web服务器持有这些缓存的应用程序/ JSON文件?
编辑: 我正在查看从Web服务器下来的实际.aspx源,并将它们缓存在那里.所以据我所知,这是一个Web服务器缓存问题,不一定是JQUERY缓存问题.
我需要的是:
我想找到一些至少有3个以上正确实现的东西.如果他们可以帮助我,我也可以看看像Dojo或JQuery这样的js框架,但是我能够保持它足够小吗?
我一直在尝试将项目迁移到新的API,但在尝试SQL查询时遇到以下错误,如下所示:
这是返回的内容:
{
"error": {
"errors": [
{
"domain": "usageLimits",
"reason": "accessNotConfigured",
"message": "Access Not Configured"
}
],
"code": 403,
"message": "Access Not Configured"
}
}
Run Code Online (Sandbox Code Playgroud)
但是,以下查询确实有效:https: //www.googleapis.com/fusiontables/v1/tables/1bTX-w0Lt6nT8jq4R0q2pwFvuN_X5iPDOKHWFhw/columns?key=myKey
我究竟做错了什么?
我试图从网站(特别是Yummly)获取一些API数据,看起来当我尝试执行JSONP请求时,我收到JSON数据.这会导致"Uncaught SyntaxError:UnexpectedToken:".
试图这样做的代码是:
var keywords = $('#input-text').val();
var url = "http://www.yummly.com/api/recipesq="+keywords+"&_app_id=<snipped-app-id>&_app_key=<snipped-api-key>&";
$.ajax({
type: 'GET',
url: url,
dataType: 'jsonp',
//dataType: 'jsonp json'
success: function() { console.log('Success!'); },
error: function(data, data2) { console.log(data); },
//jsonp: false,
//jsonpCallback: 'recipeGet'
});
});
Run Code Online (Sandbox Code Playgroud)
我试图通过重载dataType从JSONP转换为JSON,但是这并没有导致与上面不同的结果.我也试过更改回调函数,但是当我收到语法错误时它没有转到函数.当我不使用JSONP并且只使用JSON时,我收到一个,"XML-AccessHadpRequest无法加载Origin-Control-Allow-Origin不允许使用Origin.".
任何帮助将不胜感激,我一直在努力解决这个问题.
Angular 1.6.3不允许允许的请求,1.5.8我收到此错误:
$sce:insecurl
Processing of a Resource from Untrusted Source Blocked
Run Code Online (Sandbox Code Playgroud)
完整错误可在此处获得.
我想升级我的角度版本1.6.3以获得最新和最好的,但我依赖于这个API.有没有办法让我将其标记为可信API或使用此API的其他方式?这两个版本之间的区别是什么?
这是我试图运行的代码:
var app = angular.module('app', []);
app.controller('firstController', ['$http', function($http) {
console.log('firstController up and running');
var key = 'XXXXXXXXXXXXX'; // is an actual key
var self = this;
self.animal = {};
self.getRandomPet = function(){
var query = 'http://api.petfinder.com/'; // baseURL for API
query += 'pet.getRandom'; // selecting the method we would like to return
query += '?key=' + key; // Giving …Run Code Online (Sandbox Code Playgroud) jsonp ×10
javascript ×6
jquery ×6
json ×6
ajax ×3
.net ×1
angularjs ×1
dojo ×1
iis ×1
web-services ×1