标签: jsonp

在Chrome扩展程序中使用jQuery.getJSON

我需要在Chrome扩展程序中执行跨域请求.我知道我可以通过消息传递,但我宁愿坚持只是jQuery习语(所以我的JavaScript也可以作为一个<script src="">).

我做的很正常:

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", function(data) {
  console.log(data);
});
Run Code Online (Sandbox Code Playgroud)

但在错误控制台中我看到:

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

jQuery没有正确地将回调函数插入到文档中吗?我能做些什么来完成这项工作?

(如果我将代码粘贴到chrome控制台中,它可以正常工作,但如果我把它作为page.js放在扩展名中就会出现问题.)

jquery jsonp google-chrome

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

如何清理Internet Exploreor中的JSONP内存

我是JSONP开发的新手,我发现IE 7/8不会清理JSONP脚本占用的内存.运行几个小时后,这会在我的页面中导致非常高的内存消耗.

我浏览了互联网,发现大多数修复都是基于Neil Fraser的提示.从博客中可以看出,您需要使用类似的代码删除脚本中的所有属性

    var tmp;
    while (tmp = document.getElementById('JSONP')) {
        tmp.parentNode.removeChild(tmp);

        // this deletion will create error in IE.
        for (var prop in tmp) delete tmp[prop];
        tmp = null;
    }
Run Code Online (Sandbox Code Playgroud)

不幸的是,删除将在IE中创建"对象不支持此操作"的错误,并且它不会释放内存.

所以我的问题是如何真正释放我的JSONP脚本的内存?

我把我的测试代码如下:

Testing.html

<html><head></head><body><script>
var script,
head = document.getElementsByTagName('head')[0],
loadCount= 0,
uuid= 1,
URL= "memleaktest.js?uuid=",

clearConsole = function() {
    var con= document.getElementById("console");
    while (con.childNodes.length) 
        con.removeChild(con.childNodes[0]);
},

log = function(msg) {
    var div= document.createElement("DIV"),
        text= document.createTextNode(msg),
        con= document.getElementById("console");

    div.appendChild(text);
    con.appendChild(div);
},

test = { "msg" : null, …
Run Code Online (Sandbox Code Playgroud)

javascript memory internet-explorer jsonp memory-leaks

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

未捕获的TypeError:属性...不是函数 - 页面加载后

我正在使用跨域Ajax请求到外部API.每隔一段时间它就会失败,并显示控制台消息:

Uncaught TypeError: Property 'photos' of object [object DOMWindow] is not a function
Run Code Online (Sandbox Code Playgroud)

查看返回的JSON,它是有效的JSON,因此它不是外部API的错误.

我无法可靠地重现错误:似乎触发错误的唯一因素是我快速重复地调用请求.

在这种情况下,当用户移动Google地图时(我向地图添加标记),我会调用Ajax请求,如果用户移动得太快,就会发生这种情况.

以下是我的代码的相关部分:

// Code located inside an external JS file referenced inside the head
// Not wrapped inside document.ready - but all the code setting up 
// the map (calling a function which calls a function which adds the 
// tilesloaded listener) *is* inside document.ready
function addMarkers() {
    var pm_url = "http://www.cyclestreets.net/api/photos.json?key=" + MY_KEY;
    $.ajax({
       url: pm_url,
       crossDomain: true, 
       contentType: "application/json",
       dataType: 'jsonp',
       data: pmdata, …
Run Code Online (Sandbox Code Playgroud)

javascript ajax jquery jsonp

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

如何为现有的WCF服务本机启用JSONP?

我有一个现有的服务,如下面的方法:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]
public class SomeService : ISomething
{
    public SomeListResults SomeList(SomeParams someParams)
    {
          ....
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法可以同时允许JSONP调用和JSON(检测它).这是原生的吗?

c# asp.net wcf json jsonp

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

以适当的格式返回JSONP WCF

我正在尝试输出正确包装的JSONP值以供jQuery使用.

我正在寻找的输出是:

jsoncallback({"Status": "OK"})
Run Code Online (Sandbox Code Playgroud)

但它输出的atm:

"jsoncallback({"Status": "OK"})"
Run Code Online (Sandbox Code Playgroud)

显然这不是正确的JSONP格式,因为jQuery请求无法处理响应.

我在C#中的OperationContract是:

[OperationContract]
[WebInvoke(Method = "GET",
   ResponseFormat = WebMessageFormat.Json,
   UriTemplate = "returndata?s={s}")]
Stream EchoWithGet(string s);

    public string EchoWithGet(string s)
    {
        string json = @"jsoncallback({'Status':'OK'})";
        Console.WriteLine("Call Made: " + s);
        return json;
    }
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用JSON.NETSystem.Web.Script命名空间使用JavaScriptSerializer.

但是没有什么对我有用,我真正想做的就是摆脱两个双引号.

c# wpf wcf jsonp web-services

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

如何配置Angular $ resource(ngResource)以使用CORS从另一个域提取数据

我希望能够使用CORS来设置资源,使用CORS来请求我的数据.我有CORS使用$ http,但相同的技术不适用于$ resource我希望有人可以来救我并告诉我如何使用$ resource.

我已经修改了Angular教程最后一步,通过在services.js文件中攻击phonecatServices服务来使用CORS.

我发现这个例子使用$ http.defaults.useXDomain = true; 删除$ http.defaults.headers.common ['X-Requested-With'];行获取使用CORS请求数据的角度但是如果我尝试$ resource.defaults.useXDomain = true; 我收到错误:"无法设置未定义的属性'useXDomain'".

我认为$ resource没有这个属性,所以我的问题是,如何使用CORS配置$ resource来发出跨域资源请求.

这是我的代码:

angular.module('phonecatServices', ['ngResource']).
    factory('Phone', function($resource){
  return $resource('http\\://localhost\\:8080/:phoneId.json', {}, {
    query: {params:{phoneId:'phones'}, isArray:true}
  });
});
Run Code Online (Sandbox Code Playgroud)

当我尝试发出请求时出现以下错误:对象#<资源>没有方法'推送'

编辑

我已经尝试设置$ http并且它大部分时间都可以工作,但是当调用资源查询时,在这种情况下是Phone.get(phoneId); 这似乎抛出了上述错误.

调用我怀疑导致错误的代码(来自controllers.js 第11步角度教程):

function PhoneDetailCtrl($scope, $routeParams, Phone) {
  $scope.phone = Phone.get({phoneId: $routeParams.phoneId}, function(phone) {
    $scope.mainImageUrl = phone.images[0];
  });

  $scope.setImage = function(imageUrl) {
    $scope.mainImageUrl = imageUrl;
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我删除上述方法的内部代码运行正常(没有获得网站的图像),但我不明白为什么这不起作用?我已经设置了$ http服务来使用CORS,所以应该将它传递给$ resource.

任何人都可以对此有所了解吗?(任何工作示例代码将不胜感激).

编辑:13/08/13

正如所有访问这个问题的人都知道的那样,下面的答案都没有真正回答过这个问题,我正在研究一个答案,但是如果有人发现这个并且有答案我会非常感激它.

编辑:06/09/13

目前正在调查这个项目,似乎允许我正在寻找的一切:https …

jsonp cors angularjs angular-resource angularjs-resource

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

使用JSONP找不到JSON_CALLBACK

我正在尝试使用以下代码获取JSONP响应...

$http.jsonp('http://example.com:8888/?callback=JSON_CALLBACK').success( function( response )
{
    console.dir( response );
});
Run Code Online (Sandbox Code Playgroud)

http://example.com:8888/?callback=JSON_CALLBACK通过node.js返回以下内容

JSON_CALLBACK({date:'2013-05-15T08:53:51.747Z'});

标题是在node.js中设置的,就像这样....

res.writeHead(200, {'Content-Type': 'application/json'});
Run Code Online (Sandbox Code Playgroud)

但我在Chrome控制台中遇到的错误是......

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

但是,奇怪的是,如果我创建window.JSON_CALLBACK(response)它将运行它的功能.但我认为成功意味着代表我这样做.

jsonp angularjs

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

Cookie未在IE中与JSONP请求一起发送

我在域A上托管了一些JavaScript,它向域B上的服务发出JSONP请求.对B/Auth的请求设置包含身份验证令牌的cookie.对域B上的其他服务的后续请求也应包含此cookie.

在Chrome中,这种机制非常有效; cookie被设置,发送,并返回数据.在IE10中,Set-Cookie标头返回来自B/Auth的响应,但不包括在后续请求中.

Set-Cookie  MINT_SESSIONTOKEN=MyDST={TOKEN}; expires=Thu, 10-Oct-2013 11:57:45 GMT; path=/; HttpOnly
Run Code Online (Sandbox Code Playgroud)

经过一些谷歌搜索和实验后,我发现如果我将IE的隐私设置(Internet选项>隐私)设置为低或接受所有Cookie,则会随后向域B请求发送cookie.任何高于低的设置都会阻止cookie被发送.

虽然这对我来说解决了这个问题,但对于那些为了获取数据而必须重新配置其隐私设置的用户来说,它并没有解决问题.

我对引擎盖下究竟发生了什么感到困惑.我认为IE将cookie视为第三方并阻止它被设置(尽管cookie被设置为并被发送到域B),这就是为什么在后续请求中省略它的原因.

我可以做些什么来阻止IE阻止cookie,而用户不必修改他们的浏览器隐私设置?

javascript cookies internet-explorer jsonp

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

JSONP 414(Request-URI太大)

我正在尝试使用JSONP将大量数据(~50000字节)发送到另一台服务器,但我得到414(Request-URI Too Large)响应(JSONP只允许GET).将数据拆分为2k块会减慢整个应用程序的速度,因此我正在寻找其他解决方案.

我试图在Apache的虚拟主机中更改LimitRequestLine指令,但似乎这没有效果,仍然是同样的错误.

任何其他想法如何发送来解决这个问题?也许比JSONP还有其他一些解决方案?

javascript json jsonp cors

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

将Typeahead与Google自定义搜索引擎结合使用

我正试图让Twitter Typeahead + Bloodhound与Google的CSE合作.

到目前为止,我已经设法返回结果,但我无法计算出datumTokenizer.

var results = new Bloodhound({
  datumTokenizer: function(data) {
   return Bloodhound.tokenizers.whitespace(d.value)
  },
  queryTokenizer: Bloodhound.tokenizers.obj.whitespace,
  remote: {
    url: "http://clients1.google.com/complete/search?client=partner&hl=en&sugexp=gsnos%2Cn%3D13&gs_rn=25&gs_ri=partner&partnerid=004914516364918182382%3Ayfqw09r4qvu&types=t&ds=cse&cp=3&gs_id=15&q=%QUERY&callback=showResults&duffCallback=?",
    ajax: $.ajax({type:'GET',dataType:'jsonp',jsonp:'duffCallback'}),
    filter: showResults
  }
});
Run Code Online (Sandbox Code Playgroud)

看小提琴:http://jsfiddle.net/thugsb/3KAjh/

你会看到我将showResults()作为一个数组返回结果.但是,从中调用showResults()filter:似乎没有做任何事情,因为删除该行没有任何效果.所以我不太确定发生了什么.

请注意,duffCallback是我在阅读这个问题时要做的.如果有更好的方法来完成这项工作,我会全都耳朵!

jquery jsonp google-custom-search typeahead.js bloodhound

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