标签: jsonp

是否有理由不将JSONP用于AJA~X请求?

如果您正在构建AJA~Xy应用程序,JSONP即使您没有计划任何cross-domain请求,使用请求/响应是否有任何缺点?

我唯一能想到的是回调包装器有几个额外的字节......

编辑:

我发现也暗示security and error handling了潜在的问题......

没有错误处理.该script injection要么工作,要么没有.如果出现错误injection,它会点击页面,并且没有窗口错误处理程序(坏,坏,非常糟糕),你需要确保返回值在server side.

我认为这不是error handling一个很大的问题...我们大多数人都会使用一个库来生成JSON......我的回答的良好构成并不是这个问题的关注点.

和安全:

网上有文档可以提供帮助,但作为粗略检查,我会检查server side脚本中的引荐来源.

看起来这是任何类型的回应的潜在问题......当然,JSONP在安全领域没有什么独特之处......?

javascript ajax json jsonp

6
推荐指数
2
解决办法
3303
查看次数

在线JSONP转换器/包装器

我想获取文件源并将其包装在JSONP中.

例如,我想从我不拥有的主机中检索pets.txt作为文本.我想通过使用客户端JavaScript来做到这一点.

我正在寻找可以将任何东西转换为JSONP的在线服务.


YQL

Yahoo Query Language就是其中之一.

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D"http://elv1s.ru/x/pets.txt"&format=json&callback=grab

如果robots.txt未阻止URL,则此方法有效.YQL 尊重robots.txt.我无法获取http://userscripts.org/scripts/source/62706.user.js,因为它是通过robots.txt阻止的.

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D"http://userscripts.org/scripts/source/62706.user.js"&format=json&callback=grab

"禁止":"域名的robots.txt禁止抓取网址:http://userscripts.org/scripts/source/62706.user.js "


所以我正在寻找其他解决方案.

xss json jsonp web-services cross-domain

6
推荐指数
1
解决办法
4671
查看次数

为什么jQuery不会自动附加JSONP回调?

$.getJSON()文件规定:

如果指定的URL位于远程服务器上,则该请求将被视为JSONP.有关jsonp更多详细信息,请参阅$ .ajax()中有关数据类型的讨论.

数据类型的$.ajax()文档jsonp说明(强调我的):

使用JSONP加载JSON块.会添加一个额外的"?callback =?" 到URL的末尾以指定回调.

所以,如果我$.getJSON()使用跨域URL 调用,那么额外的"回调=?" 参数应自动​​添加.(文档的其他部分支持这种解释.)

但是,我没有看到这种行为.如果我不添加"callback =?" 显式地,jQuery错误地生成XMLHttpRequest(由于我无法读取响应跨域,因此返回空数据).如果我明确地添加它,jQuery正确地发出<script>请求.

这是一个例子:

var URL = "http://www.geonames.org/postalCodeLookupJSON" +
    "?postalcode=10504&country=US";

function alertResponse(data, status) {
  alert("data: " + data + ", status: " + status);
}

$.getJSON(URL, alertResponse);
// alerts "data: null, status: success"

$.getJSON(URL + "&callback=?", alertResponse);
// alerts "data: [object Object], status: undefined"
Run Code Online (Sandbox Code Playgroud)

发生什么了?我误解了文档还是遗忘了什么?

不言而喻,这不是一个大问题,但我正在创建一个Web API,我故意将回调参数设置为"回调",希望能很好地适应jQuery的使用.

谢谢!

(编辑:如果你有兴趣,我会在jQuery论坛中交叉发布.)

jquery jsonp

6
推荐指数
2
解决办法
2万
查看次数

使用jsonp错误的jQuery ajax请求

我正在编写一个应用程序,我需要从另一台服务器访问客户端的一些json数据.由于跨域问题,我计划使用jsonp.jQuery允许我使用$ .getJSON()方法执行此操作,但是,我无法判断方法是否已失败(即服务器没有响应或其他内容).所以我尝试使用$ .ajax来获取JSON数据.但它不起作用,我不知道该尝试什么.这是一个显示我的问题的示例:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
 <html>
 <head>
      <meta http-equiv="Content-type" content="text/html; charset=utf-8">
      <title>TEST</title>
      <script type="text/javascript" src="scripts/jquery-1.5.1.min.js"></script>
      <script type="text/javascript">
           $(document).ready(function() {
        $('#button_detect').click(function(){
            var feedApiAjax = 'http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=';
            var feedApiGetJSON = 'http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&callback=?&q=';
            var feedUrl = 'http://www.engadget.com/rss.xml';

            $.ajax({
                url: feedApiAjax + feedUrl,
                datatype: 'jsonp',
                success: function(data) {
                    console.log('$.ajax() success');
                },
                error: function(xhr, testStatus, error) {
                    console.log('$.ajax() error');
                }
            });

            $.getJSON(
                feedApiGetJSON + feedUrl,
                function(data) {
                    console.log('$.getJSON success');
                });
        });
    });
      </script>
 </head>
 <body>
      <div id="button_detect">CLICK ME!!!!</div>
 </body>
Run Code Online (Sandbox Code Playgroud)

如果您使用此代码创建一个网页并单击"Click Me"div,您将看到$ .getJSON请求正在运行而$ …

ajax jquery json jsonp

6
推荐指数
2
解决办法
2万
查看次数

jQuery JSONP"Uncaught SyntaxError:Unexpected token:"

这是我的AJAX调用:

$.ajax({
    type: 'GET',
    url: User.baseURL + 'api/users/briefProfile',
    dataType: 'jsonp',
    success:function(data,text,xhqr){
        //var data = $.parseJSON(data);
        console.log(data);
    },
    error: function(jqXHR, textStatus, errorThrown) {

        console.log("ERROR");
    },
    complete: function(jqXHR, textStatus) {

        console.log("complete");
    }

});
Run Code Online (Sandbox Code Playgroud)

错误是: Uncaught SyntaxError: Unexpected token :

我在Chrome中得到了200的响应(最新).我在响应中获得了有效JSON的所有内容.我并不在乎浏览器没有正确解析它,但我真的希望在完整的回调中访问它.

知道什么是a)导致错误?b)如何到达客户端返回的内容?

ajax jquery jsonp

6
推荐指数
1
解决办法
6226
查看次数

jQuery:通过ajax获取JSON,但使用POST而不是GET

我正在使用jQuery的$ .ajax使用JSONP向第三方服务器发出请求.我将方法指定为POST,但它仍然使用GET:

    $.ajax({
        type: "POST",
        dataType: "json",
        url: other_server + "/run?callback=?",
        data: {
            code: $(code).val()
        },
        success: function(obj) {
            var res = obj.results;
            $(results).val(res);
        }
    });
Run Code Online (Sandbox Code Playgroud)

查看jQuery源代码,我看到这两行似乎强制所有跨域请求都是GET,但我不明白为什么需要如此:

if ( s.crossDomain ) {
    s.type = "GET";
Run Code Online (Sandbox Code Playgroud)

是否可以使用POST而不是GET执行此操作?为什么jQuery强制使用GET?

ajax jquery jsonp

6
推荐指数
1
解决办法
2235
查看次数

在.jax成功函数中接收.csv文件作为数据

请考虑这个javascript:

$.ajax({
    url:'http://ichart.finance.yahoo.com/table.csv?s=GS&amp;a=00&amp;b=1&amp;c=2010&amp;d=08&amp;e=3&amp;f=2012&amp;g=d&amp;ignore=.csv',
    type:'get',
    dataType:'jsonp',
    success:function(data){
        alert(data);
    }
})
Run Code Online (Sandbox Code Playgroud)

URL返回.csv文件,但我指定jsonp数据类型,因为这是一个跨域的ajax请求.没有该参数,我得到"不允许原点"错误.

由于我指定了jsonp数据类型,因此ajax函数会抛出错误,因为.csv文件不是JSON格式.但是在开发控制台中,我可以看到浏览器会收到一个连贯的.csv文件.所以我知道我已成功接收CSV文件.我认为它应该是可能的,但我不确定如何正确地将这个csv文件接收到我的ajax函数?

当然,如果我能使这个URL返回一个格式正确的JSON字符串,那将是最好的,但我不确定我能做到这一点.

这是一个小提琴,你可以尝试它,你将不得不打开开发控制台来看到这个错误:http://jsfiddle.net/92uJ4/3/

任何帮助是极大的赞赏.

蒂姆

csv ajax jquery jsonp cross-domain

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

跨域AJAX读取XML

诺比在这里.我正在编写一个需要从另一个域读取XML文件的客户端脚本.我尝试过使用JSONP.我得到200响应但客户端由于某种原因无法访问返回的数据.我收到两个错误:

Resource interpreted as Script but transferred with MIME type text/xml
Run Code Online (Sandbox Code Playgroud)

Uncaught SyntaxError: Unexpected token <
Run Code Online (Sandbox Code Playgroud)

这是代码(我删除了XML url,因为它是保密的):

$(document).ready(function() {
  $.getJSON("urlOfFilecallback=?", function(data) {
  console.log(data)
 })
});
Run Code Online (Sandbox Code Playgroud)

当我尝试在控制台中呈现数据时,我得到:

ReferenceError: data is not defined
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?我需要使用代理吗?

javascript xml jquery jsonp cross-domain

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

Yelp API和AngularJS

我正在尝试使用AngularJS调用Yelp API,但我遇到了麻烦.我一直收到400坏请求,我不知道为什么.

Yelp API文档:

http://www.yelp.com/developers/documentation/v2/authentication http://www.yelp.com/developers/documentation/v2/search_api

包含Yelp API生成密钥的页面:

http://gyazo.com/fa918329eb0cde18a5db242d1d0b0b0e

这是我的代码执行调用的片段:

function randomString(length, chars) {
var result = '';
for (var i = length; i > 0; --i) result += chars[Math.round(Math.random() * (chars.length - 1))];
return result;
}

app.factory("MyYelpAPI", function($http) {
return {
    "retrieveYelp": function(name, callback) {
        $http.jsonp("http://api.yelp.com/v2/search?term=food&location=San+Francisco&callback=JSON_CALLBACK",
            {
                params: {
                    oauth_consumer_key: /* Consumer Key */,
                    oauth_token: /* Token */,
                    oauth_signature_method: "hmac-sha1",
                    oauth_signature: /* Token Secret */,
                    oauth_timestamp: new Date().getTime(),
                    oauth_nonce: randomString(32, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')
                }
            }
        ).success(callback);
    }
}
});
Run Code Online (Sandbox Code Playgroud)

jsonp yelp angularjs

6
推荐指数
1
解决办法
5197
查看次数

如何获取Twitter URL计数?

我有以下代码,我无法理解它为什么不返回并在HTML正文中打印它.

var pageURL = document.URL;
var tweet  = "https://cdn.api.twitter.com/1/urls/count.json?url='"+ pageURL + "'";

$.getJSON(tweet,function(json){
    $('#twitterfeed').html(json.count); 
});

<div id="twitterfeed"></div>
Run Code Online (Sandbox Code Playgroud)

https://cdn.api.twitter.com/1/urls/count.json?url=http://www.google.com

返回{"count":23844636,"url":"http://www.google.com/"}

以下似乎没有用,有没有人知道为什么?

javascript api twitter jquery jsonp

6
推荐指数
2
解决办法
5278
查看次数

标签 统计

jsonp ×10

jquery ×7

ajax ×5

cross-domain ×3

javascript ×3

json ×3

angularjs ×1

api ×1

csv ×1

twitter ×1

web-services ×1

xml ×1

xss ×1

yelp ×1