标签: jsonp

未定义JSONP回调方法

我试图在一个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脚本运行时则不行.

asp.net ajax jquery greasemonkey jsonp

5
推荐指数
1
解决办法
7600
查看次数

测试静态jsonp响应

我在制作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 jsonp

5
推荐指数
1
解决办法
7400
查看次数

如何使用JSONP查询Facebook Graph API

不应该遵循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解决了这个问题,我做错了什么?

jquery jsonp facebook

5
推荐指数
1
解决办法
1万
查看次数

JQuery - $ .ajax() - 使用JSONP的跨源 - 仅在IE 8中获取'parsererror'(在IE 7中工作)

我有以下代码来执行跨域请求并获取JSONP数据(JSON由回调方法包装).我已经验证我正在使用包装我的JSON数据的回调方法正确获得响应.它在IE7中完美地工作(回调cb被调用)但在IE8中没有.

    $(document).ready(function () {
    var abc = $.ajax({
        type: "GET",
        url: "http://sd.domain.com/param1=a&param2=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的属性.那么如何在错误/完整功能中获得响应?有任何想法吗?

jquery jsonp cross-domain internet-explorer-8

5
推荐指数
1
解决办法
3840
查看次数

从本地文件://的跨源GET

我正在尝试构建一个html文件来监视远程站点(尤其是github.com)上的某些内容。我希望能够将其保存到该平面文件中,从而将请求直接从JS发送到github的API。我的思考过程如下:

  1. 让我们使用jsonp,因为我只需要读取访问权限,所以坚持使用GET应该没问题。
  2. 好的,我将使用Github的OAuth代替基本身份验证!
    • 失败是因为浏览器不喜欢我重定向到本地资源:Not allowed to load local resource: file:///Users/...出于可理解的安全原因。
  3. 好的,我将Github的oauth加载到iFrame中,然后获取结果url(其中应包含我需要的oauth代码)。
    • 之所以失败,是因为您显然无法访问有关子iframe的任何内容(如果它在另一个域中),因此,除非我重定向回file:/// whatever,否则我将无法获得最终网址。而且,由于``不允许再次加载本地资源'',我当然无法重定向到file:///。
  4. 好的,我将使用跨域资源共享(再次回到基本身份验证)!

因此,关于如何通过单个本地html文件成功验证此api的任何建议-可以解决上述问题,也可以完全解决吗?

javascript ajax jsonp cross-domain github-api

5
推荐指数
1
解决办法
5010
查看次数

如何检查端口是否在客户端的网络/防火墙处打开?

最后使用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)

javascript java jquery jsonp java-ee

5
推荐指数
1
解决办法
1万
查看次数

以jsonp发送请求,使用jQuery 1.5将响应解释为文本

简短的问题:有没有办法向服务器发出jsonp请求,捕获请求,但不能将其解析为javascript?我在jQuery 1.5中使用dataType:"jsonp text"但它无法正常工作.

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

  • 在Firefox中,我收到"XML标记名称不匹配(预期的META)"错误.在chrome中,我得到一个"Uncaught SyntaxError Unexpected token <",它们都指向与我的AJAX请求相对应的文件.错误回调中的错误字符串是"parsererror".
  • 我无法进行正常的AJAX调用 - 当我将数据类型更改为"text"或将其全部删除时,另一个域会抱怨用户未经过身份验证并重定向到登录页面 - 即使我已经登录浏览器端.当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"); });
Run Code Online (Sandbox Code Playgroud)

jquery jsonp cross-domain cors

5
推荐指数
1
解决办法
5677
查看次数


使用IE9进行跨域AJAX请求

除非请求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的所有请求(但这显然不是这种情况).

ajax jquery internet-explorer jsonp

5
推荐指数
1
解决办法
8012
查看次数

将Accept标头添加到JQuery AJAX GET(通过JSONP)请求

我正在尝试将一个接受标头添加到使用"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)

ajax jquery jsonp get http-accept-header

5
推荐指数
1
解决办法
1万
查看次数