我试图在一个greasemonkey脚本中使用jquery来获取jsonp回调.这是我的jquery:
$.ajax({
url: "http://mydomain.com/MyWebService?callback=?",
data: { authkey: "temphash" },
type: "get",
dataType: "json",
cache: false,
success: function(data) {
console.log(data);
}
});
Run Code Online (Sandbox Code Playgroud)
在我的webservice(asp.net)中,我将返回内容类型为的响应application/javascript.服务器实际发回的响应是:
jsonp1276109314602({"message":"I'm getting tired of this not working"})
Run Code Online (Sandbox Code Playgroud)
该jsonp1276109314602方法名称由jQuery的被随机生成的,并且我与它抢夺Request.QueryString["callback"]
但是我的成功函数从未调用过,而firebug控制台给我一个错误说法jsonp1276109314602 is not defined.
我究竟做错了什么?
注意 我正在craigslist页面上的greasemonkey脚本中进行此调用.这是一个跨域请求,但我可以看到请求实际上是在服务器上并返回一个好的响应,但无论出于何种原因,当响应返回时,jquery创建的注册回调似乎不存在.如果我从craigslist页面在firebug控制台中运行脚本,它可以正常工作,但是当它从greasemonkey脚本运行时则不行.
我在制作jsonp请求时没有遇到任何问题,但是我不确定如何设置一个Web服务来在jsonp中提供响应.
首先,是否需要以某种方式配置服务器以允许jsonp请求,或者页面是否必须正确格式化响应?
在我的测试中,我从geonames.org获得了以下jsonp响应(我在服务器/域1上放置了一个空白页面,没有别的):
<?php echo $_GET['callback'];?>({"postalcodes":[{"adminName2":"Westchester","adminCode2":"119","postalcode":"10504","adminCode1":"NY","countryCode":"US","lng":-73.700942,"placeName":"Armonk","lat":41.136002,"adminName1":"New York"}]});
Run Code Online (Sandbox Code Playgroud)
在服务器/域2上,我发出以下请求:
$.ajax({
// works when I make the call to geonames.org instead of domain1
//url: 'http://www.geonames.org/postalCodeLookupJSON?postalcode=10504&country=US&callback=?',,
url: 'http://www.domain1.com/test/jsonp.php?callback=?',
success: function(data) {
$('#test').html(data);
},
});
Run Code Online (Sandbox Code Playgroud)
将文件放在同一服务器(域1或2)上并将其转换为常规json请求时,调用有效.我究竟做错了什么?
只是为了澄清:我的问题与收到请求的页面有关.当我将它发送到geonames.org,flickr等时,我知道请求有效... apis.但是,我正在尝试设置一个页面来发送响应.在我的例子中,我只有一个带有硬编码jsonp的空白页面.我不确定我是否必须在页面上有其他标题或在我的服务器上启用了某些功能.
不应该遵循JQuery工作的AJAX请求吗?
$.getJSON('https://graph.facebook.com/138654562862101/feed?callback=onLoadJSONP');
Run Code Online (Sandbox Code Playgroud)
我已经定义了一个名为的回调函数onLoadJSONP.
但是Chrome给了我一个典型的Same-Origin-Policy错误:
XMLHttpRequest的无法加载 https://graph.facebook.com/138654562862101/feed?callback=onLoadJSONP.Access-Control-Allow-Origin不允许使用null.
我以为JSONP解决了这个问题,我做错了什么?
我有以下代码来执行跨域请求并获取JSONP数据(JSON由回调方法包装).我已经验证我正在使用包装我的JSON数据的回调方法正确获得响应.它在IE7中完美地工作(回调cb被调用)但在IE8中没有.
$(document).ready(function () {
var abc = $.ajax({
type: "GET",
url: "http://sd.domain.com/param1=a¶m2=b&output=json&callback=cb",
dataType: "jsonp",
jsonp: false,
cache: false,
success: function (json) {
},
error: function (e) {
}
});
abc.error(function (data, xhr, dat1) {
});
abc.complete(function (xhr, status) {
var data = xhr.responseText;
});
});
function cb(dd) {
alert(dd.people[0].nameFirst);
}
Run Code Online (Sandbox Code Playgroud)
我将statusText称为'Success',StatusCode为xhr中的200.此外,我无法为xhr找到任何称为responseText的属性.那么如何在错误/完整功能中获得响应?有任何想法吗?
我正在尝试构建一个html文件来监视远程站点(尤其是github.com)上的某些内容。我希望能够将其保存到该平面文件中,从而将请求直接从JS发送到github的API。我的思考过程如下:
Not allowed to load local resource: file:///Users/...出于可理解的安全原因。因此,关于如何通过单个本地html文件成功验证此api的任何建议-可以解决上述问题,也可以完全解决吗?
最后使用jQuery AJAX(和JSONP)的"timeout"属性解决了这个问题.看看我自己的答案!
请参阅更新的部分,我也尝试过applet.如果您可以通过applet实现提供解决方案,我们会毫不犹豫地接受您的答案.
我正在使用基于Java的Web应用程序.我的要求是检查特定端口(例如1935)是否在客户端打开或阻止.我已经实现了一个"jsonp"(为什么'jsonp'?我发现通过AJAX的'http'请求不能用于corssdomain for browsers'相同的原始策略')AJAX调用我的一个包含特定端口的服务器.如果服务器返回xhr.status == 200端口是打开的.这是一个缺点,我不能让执行流等待(同步),直到调用完成.这是我正在使用的JavaScript函数.
任何替代解决方案(必须是客户端的东西必须与我的应用程序并行,请不要建议python/php /其他语言)也欢迎.谢谢你的时间.
function checkURL() {
var url = "http://10.0.5.255:1935/contextname" ;
var isAccessible = false;
$.ajax({
url: url,
type: "get",
cache: false,
dataType: 'jsonp',
crossDomain : true,
asynchronous : false,
jsonpCallback: 'deadCode',
complete : function(xhr, responseText, thrownError) {
if(xhr.status == "200") {
isAccessible = true;
alert("Request complete, isAccessible==> " + isAccessible); // this alert does not come when port is blocked
}
}
});
alert("returning isAccessible=> "+ isAccessible); //this alert …Run Code Online (Sandbox Code Playgroud) 简短的问题:有没有办法向服务器发出jsonp请求,捕获请求,但不能将其解析为javascript?我在jQuery 1.5中使用dataType:"jsonp text"但它无法正常工作.
我正在尝试使用jsonp通过AJAX访问跨域URL.问题是另一个域(我大学的目录列表)很老,我怀疑服务器是否支持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"); });
Run Code Online (Sandbox Code Playgroud) 除非请求dataType设置为"jsonp"或"script",否则不会在IE9中执行跨域AJAX请求(使用jQuery 1.7.2创建).
我在构建请求时发现了这个问题,我不关心响应,并且未指定dataType(是的,我知道我应该关心响应).
所以,例如,这将工作:
$.ajax({
url: "http://www.google.com",
type: "GET", // or "POST"
dataType: 'jsonp'
});
Run Code Online (Sandbox Code Playgroud)
但这不会:
$.ajax({
url: "http://www.google.com",
type: "GET" // or "POST"
});
Run Code Online (Sandbox Code Playgroud)
通过"工作"我的意思是我看到在Firebug或F12中发出的HTTP请求.
这两个请求都适用于其他浏览器 设置jQuery.support.cors = true;不会影响成功,也不会将crossDomain设置为true,也不会将cache设置为false(在AJAX请求中).
为什么AJAX请求的成功取决于IE中请求的dataType?我能理解为什么它会影响我处理任何返回数据的能力; 我也理解一些服务器可能会拒绝对某个dataType的所有请求(但这显然不是这种情况).
我正在尝试将一个接受标头添加到使用"jsonp"的jQuery AJAX GET请求中dataType,但由于某种原因它无效.到目前为止,这是我的代码.
var e4json = JSON.stringify( {
"thomas_smith106" : "Daniel244",
"transaction_type" : "34",
"transaction_tag" : "902006933",
"authorization_num" : "ET4653",
"amount" : "15.75"
} );
$.ajax ({
url: "https://api.demo.globalgatewaye4.firstdata.com",
type: "GET",
headers : {
'accepts' : 'application/json'
},
data: e4json,
dataType: "jsonp",
success: function (response) {
alert('Successfuly called the e4 gateway api');
}
});
Run Code Online (Sandbox Code Playgroud)
我尝试了很多东西,但似乎没有任何工作.我查看了jQuery网站上的文档,但我找不到任何好的例子.
这是我的请求标题.我需要接受标头为'application/json'.
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Cookie:_fd_session=d69310c5cd4a02a4700b5ba63f0d0c9b
Host:api.demo.globalgatewaye4.firstdata.com
Referer:http://localhost:8080/smart-two-site/customerinfo.html
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36 …Run Code Online (Sandbox Code Playgroud) jsonp ×10
jquery ×8
ajax ×5
cross-domain ×4
javascript ×3
asp.net ×1
cors ×1
facebook ×1
get ×1
github-api ×1
greasemonkey ×1
java ×1
java-ee ×1