标签: jsonp

jQuery JSONP ajax,未设置身份验证标头

我正在尝试使用以下设置向google contacts API发出ajax请求:

$.ajax({
  url: "https://www-opensocial.googleusercontent.com/api/people/@me/@all",
  dataType: 'jsonp',
  data: {
    alt: 'json-in-script'
  },
  headers: {
    'Authorization': 'Bearer ' + token
  },
  success: function(data, status) {
    return console.log("The returned data", data);
  }
});
Run Code Online (Sandbox Code Playgroud)

但是身份验证标头似乎没有设置.有任何想法吗?

请求

javascript jquery jsonp http-headers

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

动态多个延迟jQuery Ajax调用

使用jQuery http://api.jquery.com/jQuery.when/中的Deferred模式,我尝试进行多个jsonp ajax调用并等待结果,然后再转到下一步.我可以使用固定数量的调用来完成此操作,因为我可以在".done()"延迟对象中设置已解析参数的数量.但是在我的应用程序中它不起作用,因为调用的数量是动态的并且总是未知的.

第一个简化示例有效,因为我可以设置.done()已解析函数中的args数.我知道我需要两个,因为.when()中有两个调用:

$.when( $.ajax( url1 ), $.ajax( url2 ) ).done(function( a1, a2 ) {  
    var data = a1[ 0 ] + a2[ 0 ]; 
});
Run Code Online (Sandbox Code Playgroud)

这是我需要但却无法使用它:

var urls = GetUrlList(); // returns array of urls to json service
var requests = []; // hold ajax request
for (i = 0; i < urls.length; i++) {
    requests.push($.ajax(url[i]));
}

$.when.apply($, requests).done(function ("what goes here?") {
    // Need to get the data returned from all ajax calls here
});
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助!

javascript ajax jquery jsonp deferred

25
推荐指数
1
解决办法
8200
查看次数

使用JSONP加载html页面

我正在尝试使用加载外部页面JSONP,但页面是一个HTML页面,我只想使用ajax获取它的内容.

编辑:我这样做的原因是因为我想在加载页面而不是我的服务器时传递所有用户信息ex:headers,ip,agent.

这可行吗?现在,我可以获取页面,但jsonp尝试解析json,返回错误:Uncaught SyntaxError: Unexpected token <

示例代码:

$.post('http://example.com',function(data){
    $('.results').html(data);
},'jsonp');
Run Code Online (Sandbox Code Playgroud)

我已经为人们设置了一个jsfiddle:http: //jsfiddle.net/8A63A/1/

javascript ajax jquery jsonp

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

提供JSONP是否安全?

<?php header('content-type: application/json');

$json = json_encode($data);

echo isset($_GET['callback'])
    ? "{$_GET['callback']}($json)"
    : $json;
Run Code Online (Sandbox Code Playgroud)

或者我应该例如过滤$_GET['callback']变量,以便它只包含有效的JavaScript函数名称?如果是这样,什么是有效的JavaScript函数名称?

或者不是用JSONP过滤那个变量?


当前解决方案:http://www.geekality.net/?p=1021上发布关于我当前解决方案的博客.简而言之,就目前而言,我有以下代码,希望它们非常安全:

<?php header('content-type: application/json; charset=utf-8');

function is_valid_callback($subject)
{
     $identifier_syntax
       = '/^[$_\p{L}][$_\p{L}\p{Mn}\p{Mc}\p{Nd}\p{Pc}\x{200C}\x{200D}]*+$/u';

     $reserved_words = array('break', 'do', 'instanceof', 'typeof', 'case',
       'else', 'new', 'var', 'catch', 'finally', 'return', 'void', 'continue', 
       'for', 'switch', 'while', 'debugger', 'function', 'this', 'with', 
       'default', 'if', 'throw', 'delete', 'in', 'try', 'class', 'enum', 
       'extends', 'super', 'const', 'export', 'import', 'implements', 'let', 
       'private', 'public', 'yield', 'interface', 'package', 'protected', 
       'static', 'null', 'true', 'false');

     return …
Run Code Online (Sandbox Code Playgroud)

javascript php jsonp

23
推荐指数
2
解决办法
7245
查看次数

对JSONP请求的工作原理感到困惑

我无法理解jsonp请求的工作原理.我已经阅读了几个来源,包括jsonp上的wiki,并且仍然非常困惑于回调实际上如何在进行jsonp调用时保持从服务器返回的函数.例如,在wiki中,请求的来源设置为:

src="http://server2.example.com/RetrieveUser?UserId=1234&jsonp=parseResponse"
Run Code Online (Sandbox Code Playgroud)

jsonp = parseResponse究竟是做什么/意味着什么?然后他们继续说有效载荷是:

parseResponse({"Name": "Foo", "Id" : 1234, "Rank": 7});
Run Code Online (Sandbox Code Playgroud)

这是如何运作的?我对整个回调功能感到困惑.函数名parseResponse被传递给服务器,不知何故返回的数据成为这个函数的参数?有人可以清楚地解释如何从jsonp请求中检索/使用数据吗?

javascript ajax jsonp

23
推荐指数
1
解决办法
6785
查看次数

从Facebook返回的X-FB-DEBUG标头是什么?

我想知道上面提到的标题是什么.当我对Facebook进行JSONP调用时,甚至在我访问http://static.ak.fbcdn.net/时,它都包含在响应中

我还没有在facebook上找到任何文档,例如https://developers.facebook.com/docs/reference/ads-api/etags-reference/

所以,希望有人可以帮助我.谢谢!

ajax jsonp facebook header facebook-javascript-sdk

21
推荐指数
2
解决办法
9624
查看次数

如何解析从远程服务器返回的JSONP数据

我试图通过JSONP获取一些数据.使用Firebug,我能够正确地看到数据被返回,但我很难想到我必须解析它.数据返回真的是嵌套数组正确吗?someFunction是回调函数的名称.这是数据的外观:

someFunction([  
{  
       "title":"Sample Title",  
       "link":"http://example.com",  
       "description":"Sample Description",  
       "publisher":"Sample Publisher",  
       "creator":"Sample Author",  
       "date":"Thu, 19 Aug 2010 12:41:29 GMT",  
       "num_pages":10,  
       "num_results":"10"  
},  
]);
Run Code Online (Sandbox Code Playgroud)

关于如何正确解析和输出有点困惑.

javascript ajax jquery json jsonp

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

应在输出中过滤的Unicode字符列表?

最近我因浏览器支持的数据质量而遇到了一个错误,我正在寻找一个安全的规则来应用没有双倍大小的字符串转义,除非需要.

UTF-8字节序列"E2-80-A8"(U + 2028,LINE SEPARATOR),Unicode数据库中完全有效的字符.但是,该序列表示行分隔符(是,否则为"0A").

很糟糕的是,许多浏览器(包括Chrome,Firefox和Safari;我没有测试其他浏览器)无法处理JSONP回调,该回调具有包含该Unicode字符的字符串.JSONP包含在非Unicode HTML中,我没有任何控制权.

浏览器只是在这样的JavaScript上报告了INVALID CODE /语法错误,这些错误从调试工具和所有文本编辑器看起来都是有效的.我猜测它可能会尝试将"E2-80-A8"转换为BIG-5并打破JS语法.

以上只是Unicode如何破坏系统意外情况的一个示例.据我所知,一些黑客可以使用RTL和其他控制字符.Unicode规范中有许多"引号","空格","符号"和"控件".

题:

是否有一个Unicode字符列表供每个程序员了解我们可能不希望它们在我们的应用程序中有效的隐藏功能(和错误).(例如Windows禁用文件名中的RTL).

编辑:

我不是要求JSON也不是JavaScript.我要求所有程序的Unicode处理的一般最佳实践.

unicode jsonp escaping data-quality

20
推荐指数
2
解决办法
8429
查看次数

如何在PHP中替换/转义U + 2028或U + 2029字符以阻止我的JSONP API中断

好的我正在运行一个公共JSONP API,数据从我的PHP服务器提供.我刚读过这篇文章:

基本上,如果我的JSON字符串包含U + 2028字符(Unicode行分隔符)或U + 2029字符(Unicode段分隔符),那么这是完全有效的JSON.但是,当使用JSONP时,JSON将作为JavaScript执行,并且JavaScript中的任何字符串都不能包含文字U + 2028或U + 2029,因为它会破坏JavaScript.显然,只要您使用正确的JSON解析器,这通常不是问题,但在JSONP的情况下,浏览器 JSON解析器.

基本上,如果这些字符在我的JSONP数据中的字符串内部被发送到客户端,则会在字符串中抛出一行或一个段落,这会破坏JavaScript并阻止它执行.这是一种可能性,因为API正在发回一些客户端输入的数据.有人可能会在数据库中输入U + 2028或U + 2029,因此当我将其作为JSONP发回时,它将使用我的API中断任何实现.

所以我的问题是,在PHP中如何清除/输出转义JSON数据以删除或转义U + 2028和U + 2029字符,然后再将其发送到客户端?

目前,我的进程正在对数据数组执行json_encode并将该数据发送到客户端.我应该通过循环遍历数组并过滤它来转义数据,还是一次性转义所有JSON编码的字符串?

另一件事是我不知道如何在PHP中逃避U + 2028和U + 2029字符.我可以做一个str_replace吗?我不确定str_replace是否是多字节安全的,并且没有mb_str_replace函数,除非我使用一些自定义的.那你如何删除/逃脱那些unicode字符?

非常感谢.

php json jsonp escaping str-replace

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

如何从ASP.NET Web服务生成JSONP以进行跨域调用?

我写了一个返回JSON的web服务,我试图用这样的jQuery调用它:

$.ajax({
    contentType: "application/json; charset=utf-8",
    url: "http://examplewebsite.com/service.asmx/GetData",
    data: { projectID: 1 },
    dataType: "jsonp",
    success: function () {alert("success");}
});
Run Code Online (Sandbox Code Playgroud)

但是,尽管使用Fiddler查看HTTP流量时web服务调用成功,但代码从不调用成功函数.我认为这是因为我的Web服务正在返回原始JSON而不是JSONP.

如何生成JSONP作为标准.NET Web服务方法的响应,如下所示:

[WebMethod(), ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public Project GetData(int projectID)
{
    Project p = new Project();
    p.Name = "foobar";
    return p;
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

asp.net jquery jsonp cross-domain

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