我正在尝试使用来自跨域的纯javascript/html下载一些数据,dropbox是特定的.
<html>
<head>
</head>
<body>
<div id = 'twitterFeed'></div>
<script>
function myCallback(dataWeGotViaJsonp){
var text = '';
var len = dataWeGotViaJsonp.length;
for(var i=0;i<len;i++){
twitterEntry = dataWeGotViaJsonp[i];
text += '<p><img src = "' + twitterEntry.user.profile_image_url_https +'"/>' + twitterEntry['text'] + '</p>'
}
document.getElementById('twitterFeed').innerHTML = text;
}
</script>
<script type="text/javascript" src="http://dl.dropbox.com/u/6438697/padraicb.json?count=10&callback=myCallback"></script>
</body>
Run Code Online (Sandbox Code Playgroud)
出于某种原因,json没有加载.但是,当我将网址设为" http://twitter.com/status/user_timeline/padraicb.json?count=10&callback=myCallback " 时,json会正确加载.我从这里得到了这个例子
任何人都可以解释为什么Dropbox不起作用?
谢谢!
更新:
<script type=text/javascript>
function myCallback(dataWeGotViaJsonp){
alert(dataWeGotViaJsonp);
}
</script>
<script type="text/javascript" src="http://dl.dropbox.com/u/6438697/test2?&callback=myCallback"></script>
Run Code Online (Sandbox Code Playgroud)
返回[object object]或undefined ......还有什么问题?test.json的内容是myCallback({"your":"json"});
我试图用contentService的,以服务JSONP与网页谷歌Apps脚本,按照所提供的样本此链接下的"在网页服务JSONP"子课题.
GS代码:
function doGet(request) {
var events = CalendarApp.getEvents(
new Date(Number(request.parameters.start) * 1000),
new Date(Number(request.parameters.end) * 1000));
var result = {
available: events.length == 0
};
return ContentService.createTextOutput(
request.parameters.prefix + '(' + JSON.stringify(result) + ')')
.setMimeType(ContentService.MimeType.JSON);
}
Run Code Online (Sandbox Code Playgroud)
HTML/JS代码:
<script src="https://script.google.com/macros/s/AKfycbwZCY0qrZ09szGvKOttA30IaJkdMAZrh_oNnvv0qzCqFWyuO5Wc/exec?start=1325437200&end=1325439000&prefix=alert"></script>
Run Code Online (Sandbox Code Playgroud)
我通过webapp使用以下参数部署GS代码来发布它:
不幸的是,每当我尝试运行/打开包含代码的HTML文件时,我在浏览器的控制台中出现以下错误,并且没有任何反应:

如何在没有错误的情况下运行Google Apps脚本链接中提供的此示例?
浏览器翻译的DOM如下:
<html>
<head>
<script src="https://script.google.com/macros/s/AKfycbwZCY0qrZ09szGvKOttA30IaJkdMAZrh_oNnvv0qzCqFWyuO5Wc/exec?start=1325437200&end=1325439000&prefix=alert">
</script>
</head>
<body></body>
</html>
Run Code Online (Sandbox Code Playgroud)
生成的链接,在我的情况是:
" https://script.google.com/macros/s/AKfycbwZCY0qrZ09szGvKOttA30IaJkdMAZrh_oNnvv0qzCqFWyuO5Wc/exec?start=1325437200&end=1325439000&prefix=alert "
如果此链接放置在浏览器地址栏中,它显示了以下信息:

这意味着返回的授权响应无法在浏览器上显示并被转换为有效DOM.
如何克服这个问题?
我正在尝试使用以下jQuery调用对我的服务器进行Ajax 调用:
$.ajax({
type: "GET",
dataType: "jsonp",
url: "http://iceworld.sls-atl.com/api/&cmd=time",
success: function (data) {
console.log("success");
console.log(data);
},
error: function (error) {
console.log("error");
console.log(error);
},
});
Run Code Online (Sandbox Code Playgroud)
我从浏览器中获取了我期望的数据,但Firebug一直说"SyntaxError:invalid label",如下所示:

所以,让我感到困惑的是调用错误回调而不是成功的原因.我想知道我在这里做错了什么.
我正在使用 JSONP 进行 AJAX 调用,该调用失败且没有报告原因。我们正在观察被调用的服务器上发生的情况,并看到 AJAX 正在添加到 URL,这可能会增加我们的问题。
返回的数据应该是JSON。当从浏览器调用该 URL 时,它会按预期返回,而当从页面调用以下代码时,会返回“未定义”错误,表明没有报告错误。
$.ajax({
url: 'http://foo:8080/playlist',
type: 'GET',
crossDomain: true,
dataType: 'jsonp',
jsonp : false,
success: function(data){
//Writes return data to UI
writeToUI(text.html(JSON.stringify(data)));
},
error: function(e){
alert(e.message);
}
});
Run Code Online (Sandbox Code Playgroud)
当观察服务器被调用时,我们看到 URL 现在是“ http://foo:8080/playlist?._=1449088167560 ”。
我们认为 URL 上的额外信息可能会导致 API 在服务器上失败,但想看看这是从哪里来的,以及是否有办法将其关闭?
有想法吗?
史蒂夫
首先,我知道网站上有类似的帖子,但没有一个能解决我的问题。
我想从 Web 服务器获取 JSON 文件。JSON 文件已由 JSONLint 检查,因此验证语法正确。JSON 数据是从类似于以下的 URL 检索的:www.examplewebsite.com/data.json
我的 jQuery Ajax 代码:
$.ajax({
url:url",
dataType:"jsonp",
contentType: "application/json",
type:"get",
success:function(){
console.log("OK");
},
error:function(data,status,error){
console.log(data " "status+" "+error);
}
});
Run Code Online (Sandbox Code Playgroud)
这是错误:
:parsererror 错误:未调用 jQuery222030055767520832166_1465026956736
到目前为止我所做的:
alert("OK");),但我仍然收到错误。错误消息之一是“未调用未定义”Access-Control-Allow-Origin错误更新1
我的json内容(用于测试):
[{
"id": 1,
"first_name": "Sara"
}, {
"id": 2,
"first_name": "Lois"
}, {
"id": 3,
"first_name": "Annie"
}, {
"id": 4,
"first_name": "Gregory"
}, { …Run Code Online (Sandbox Code Playgroud) 我正在使用HttpClientModule和HttpClientJsonpModule在服务中发出 JSONP HTTP 请求。
app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { HttpClientModule, HttpClientJsonpModule } from '@angular/common/http';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
HttpClientModule,
HttpClientJsonpModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Run Code Online (Sandbox Code Playgroud)
此服务使用HttpClient 类中的jsonp方法从指定的 URL 获取 JSONP 响应。我认为这个响应被JsonpInterceptor拦截并发送到处理请求的JsonpClientBackend。
例子.service.ts
import { Injectable } from '@angular/core';
import { …Run Code Online (Sandbox Code Playgroud) 如果您的Web应用程序使用对外部源的Web服务API调用,则其中一些源将根据IP地址对您进行速率限制.
如果您从客户端JavaScript进行这些调用- 意味着它们是由最终用户的浏览器操作触发的 - 远程站点(发送回JSON数据)是否会看到您站点的IP地址或结尾的IP地址-user (用于此基于IP地址的速率限制)?
我的理解是,通过&callback=在数据源URL中使用,您将发出JSONP请求,这意味着远程主机看到的地址是最终用户的地址,而不是您站点的地址.
例如:
jQuery.getJSON(url+"&callback=?", function(data) {
alert("Stock Symbol: " + data.symbol + ", Stock Price: " + data.price);
});
Run Code Online (Sandbox Code Playgroud)
如上所述的呼叫会被视为来自最终用户的IP地址而不是来自您的Web应用程序的服务器IP地址,这是否正确?
我无法使用jquery库中的ajax调用使代码在回调中运行.代码如下:
function processJSONDirectoryFile(jsonData) {
finished = false;
for (var i = 0; i < jsonData.length; i++) {
processJSONCountryFile(jsonData[i]);
}
finished = true;
}
function getJSON() {
//snip
$.ajax({url: 'http://example.org/api/rest/something',
data: {},
dataType: 'jsonp',
timeout: 10000,
jsonp: "callback",
jsonpCallback: "processJSONDirectoryFile",
});
//snip
}
Run Code Online (Sandbox Code Playgroud)
我检查过我可以加载http://example.org/api/rest/something?callback=myfunc,并且按预期工作.我正在使用firebug在此代码中设置断点.该ajax呼叫断点被击中,但断点里面processJSONDirectoryFile是从来没有击中.
我还应该提到我正在使用jsonp我的代码在不同的域上运行,example.org所以我需要用来jsonp绕过域控制的东西.
我犯了一些明显的错误吗?
我如何在JSON数据下面解析这个数据作为我从服务器返回的数据,我想从这个json数据中提取值和标签,并且必须放在一个弹出窗口中.
例如: - 对于此数据 "application_number":"20007524.8"
我想提取application_number作为应用程序编号,并对应于应用程序编号,其值为20007524.8
有什么建议我怎么能这样做..
jsonp13082({"responseHeader":{"status":0,"Time":3,"params":{"json.wrf":"jsonp13082","wt":"json","q":"8377"}},"response":{"numFound":1,"start":0,"docs":[{"key":"83779616","number":"080","name":"Designated","name":"Non ","number":"27837","date":"2010-08-24T07:00:00Z","name":"Canada","name":"Application","title":"collision detection","date":"2008-03-03T08:00:00Z","id":"414","code":"CA","date":"2009-03-03T08:00:00Z","name":"Michael Henry","mgr_name":"abc","id":"79616","name":"oen","claims":"74","date":"2012-03-03T08:00:00Z","claims":"8","url":"","inventors":["D.","rshi","Pa"],"guid":["23","26","25"],"towners":["XYZ"],"inventors":["D","name2","name3"],"owners":["XYZ"]}]}})
Run Code Online (Sandbox Code Playgroud) 我有以下json ajax调用:
$.getJSON(server_data.secure_api+'/e/account/check/?callback=?', queryData,
function(data) {
has_error = (data.status == 'failure');
});
Run Code Online (Sandbox Code Playgroud)
除了它是异步的以外,它的效果非常好.我现在需要使它同步,因为我需要暂停调用函数,直到设置has_error.我该怎么做呢?
我已经尝试过使用.ajax调用,如下所示:
jQuery.ajax({
url: server_data.secure_api+'/e/account/check/?callback=?',
data: queryData,
DataType: 'jsonp',
success: function(result) {
has_error = (data.status == 'failure');
},
async: false
});
Run Code Online (Sandbox Code Playgroud)
但它不起作用!我已经尝试将DataType设置为json,jsonp或不设置; 我?callback=?试过把它包括起来,我试过把它关掉; 这一切都没有奏效.我究竟做错了什么?
jsonp ×10
jquery ×7
json ×5
ajax ×4
javascript ×4
angular ×1
dropbox ×1
file ×1
http ×1
ip-address ×1
text ×1
unit-testing ×1