我正在尝试从外部站点上的JSON获取数据,但该站点不支持JSON-P输出.这是一个非工作代码的例子,但是很好地了解了我想要实现的目标:
$.getJSON("http://www.bom.gov.au/fwo/IDV60901/IDV60901.94868.json", function(data){
//Process data here
});
Run Code Online (Sandbox Code Playgroud)
除了本地托管数据或通过AJAX/PHP调用下载和处理数据之外,还有其他方法吗?我宁愿没有服务器服务或下载数据,而是让用户的浏览器直接抓取它.
提前致谢!
我正在使用第三方jsonp库进行jquery.在调用它时,您可以将缓存设置为true.
但是,在检入HTTP嗅探器时,似乎所有请求仍然被发送到服务器.
这与picasa,flickr和youtube API.
什么可能导致这种行为?它似乎不是浏览器特定的,因为我在多个浏览器中测试它并且所有行为都相同(不是缓存).
调用的URL不会从一个请求更改为另一个请求,并且调用如下所示:
$.jsonp({
url: url,
cache: true,
async: false,
dataType: 'jsonp',
data: $.extend({ url: options.dataUrl, method: lookupData.method }, fixedOptions),
callbackParameter: "jsoncallback",
success: function(data)
{
$.extend(datasourceOptions, lookupData.onData(data));
getData();
}
});
Run Code Online (Sandbox Code Playgroud)
关于我的设置唯一的"奇怪"的事情是,将调用.jsonp脚本通过一个包括阿贾克斯调用本身..莫非是这里的问题?听起来很遥远,但......
谢谢,韦斯利
编辑:好的,4个中有3个有Expires头设置..
但是,第四个没有,只有这些:
Cache-Control:private Vary:Accept-Encoding Access-Control-Allow-Origin:*Connection:close
(这是flickr)
那里发生了什么?
另外,是不是可以通过jquery以某种方式覆盖头缓存指令?
我有以下代码来进行jsonp调用.
var contacts;
$.ajax({
url: "http://localhost:51973/Service1/GetContacts",
type: "GET",
async: false,
data: { companyName: company },
dataType: "jsonp",
success: function(data) {
contacts = data;
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("error " + XMLHttpRequest.statusText);
}
});
Run Code Online (Sandbox Code Playgroud)
但无论出于何种原因,我都将联系人定义为未定义.我使用提琴手检查了流量,我发现它得到了以下响应.
HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Mon, 09 Apr 2012 14:52:33 GMT
X-AspNet-Version: 4.0.30319
Content-Length: 100
Cache-Control: private
Content-Type: application/x-javascript
Connection: Close
jQuery17107471185381512466_1333983153278([{"Email":"john@test.com","Name":"Test Company"}]);
Run Code Online (Sandbox Code Playgroud)
那么为什么联系人变量没有正确设置?
我试图使用jquery ajax检索json数据.
alert(data.EntryList.Entry.FirstName) //This returns undefined
Run Code Online (Sandbox Code Playgroud)
我想获得名字,姓氏等的价值.
这是代码看起来像
$.ajax({
url: "",
context: document.body,
type: "GET",
dataType: "jsonp",
success: function(data) {
console.log(data);
alert(data.EntryList.Entry.FirstName)
}
}); //Ajax End?
Run Code Online (Sandbox Code Playgroud)
控制台日志截图如下

我正在创建一个简单的JSON API,它只使用jsonp使用node-js返回一个对象.这是服务器端的代码:
app.get('/vit',function (req,res,next) {
res.type('application/json');
res.jsonp(items); //items is the object
});
Run Code Online (Sandbox Code Playgroud)
在部署到nodejitsu,并转到url/vit时,我得到了对象项.这意味着它在服务器端工作.
我有另一个域,我想在哪里使用jsonp获取此对象Heres客户端代码:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript">
$.getJSON('http://trial.jit.su/vit',function (data) {
console.log(data) ;
});
</script>
Run Code Online (Sandbox Code Playgroud)
但是我在控制台上收到以下错误:
XMLHttpRequest cannot load http://trial.jit.su/vit. Origin http://jquer.in is not allowed by Access-Control-Allow-Origin.
Run Code Online (Sandbox Code Playgroud)
好像我还不懂Jsonp.
显然,使用jQuery.ajax的JSONP请求实际上并不是异步的,而只是使用Script DOM Element方法,向页面添加脚本标记.我从这里发现:https://groups.google.com/forum/#!topic/jquery-dev/5-tKI-7zQvs,其中说明:
跨域JSONP根本不是AJAX.它不使用XMLHttpRequest.它只不过是一个加载JavaScript代码的动态脚本元素.
然后在页面加载后处理该动态脚本元素(在JSONP的情况下,这意味着使用源自.ajax调用中指定的url的JSON数据的参数执行回调函数).
因此,如果我在HTML网页中有以下代码:
<script>
jQuery(document).ready(function() {
jQuery.ajax({dataType:'jsonp', data:'FIRST'...});
});
</script>
<script>
jQuery(document).ready(function() {
jQuery.ajax({dataType:'jsonp', data:'SECOND'...});
});
</script>
Run Code Online (Sandbox Code Playgroud)
事情的顺序是什么?
它会是:
(1)脚本标签做了添加到DOM的FIRST请求
(2)脚本标签做了添加到DOM的SECOND请求
(3)提出第一个请求
(4)第二次请求
要么:
(1)脚本标签做了添加到DOM的FIRST请求
(2)提出第一个请求
(3)脚本标签做了添加到DOM的SECOND请求
(4)第二次请求
或者上述两种情况都不是我的误解?
谢谢.
我想用德语变音符号显示输出,例如Fu009 \这样的输出,但我需要这样的“fü”。
<?php
$json = (object) array(
"salutation" = > ''.$order - > order_custom_fields['_billing_anrede'][0].
'',
"title" = > ''.$order - > order_custom_fields['_billing_titel'][0].
'',
"first_name" = > ''.$order - > order_custom_fields['_billing_first_name'][0].
'',
"last_name" = > ''.$order - > order_custom_fields['_billing_last_name'][0].
'',
"street" = > ''.$order - > order_custom_fields['_billing_address_1'][0].
'',
"street_number" = > ''.$order - > order_custom_fields['_billing_address_2'][0].
'',
"address_supplement" = > ''.$order - > order_custom_fields['_billing_company'][0].
'',
"zipcode" = > ''.$order - > order_custom_fields['_billing_postcode'][0].
'',
"city" = > ''.$order - > order_custom_fields['_billing_city'][0].
'',
"country" …Run Code Online (Sandbox Code Playgroud) 我一直试图从steam api中提取数据,并且没有运气,因为我总是得到上述错误.这是我正在使用的代码:
var steamurl = "https://api.steampowered.com/IDOTA2Match_570/GetMatchHistory/V001/?key=[keyomitted]&account_id=38440257&Matches_Requested=10";
function populate_api(){
var json;
$.ajax({
'url': steamurl,
'dataType': "jsonp",
'success': function (data) {
alert('success');
json = data;
}
});
}
Run Code Online (Sandbox Code Playgroud)
我省略了我的API密钥.我看过很多其他帖子,无法弄清楚问题出在哪里.我一直在使用JSONP,定期JSON,我一直在使用也尝试尝试"&callback=?"后steamurl,但无济于事.
我有一个Cordova Angularjs应用程序从我的服务器获取一些JSON.它适用于iOS 8,但当我"升级"到iOS 9时,我现在从我的服务器中得不到任何东西.服务器尚未更改,如果我导航到我的URL,我可以看到JSON响应.
我把它缩小到我的$ http.jsonp()方法.尝试检索JSON时,它给出了404错误.相同的确切代码工作正常,并在iOS 8设备上获取JSON.
其他任何人都有这个和iOS 9的问题,并已经想出更多?这看起来像苹果相关的问题......
我需要在我们的应用程序之一中进行JSONP REST调用。为了进行身份验证,我必须在url中提供JWT令牌。
通过这篇文章,我对它的安全性有了一些了解。
但是,我想了解更多有关如何以更安全的方式向JSONP提供JWT令牌的信息。
我可能无法提供有关我的应用程序的更多详细信息,但相信我我们没有使用JSONP来满足某些特定需求。
非常感谢。
在php中使用标头有什么好处?我正在开发基于休息的Web服务.
对于JSON,什么标题是必要的?标题有什么优点?
我正在尝试使用声称返回JSON的Web服务,但实际上总是返回JSONP.我没有看到改变该服务行为的方法.
我想用NewtonSoft Json.Net来解析结果.我已经声明了一个类,我们将其称为MyType,我想将内部JSON结果反序列化为.
JSONP:
parseResponse({
"total" : "13,769",
"lower" : "1",
"upper" : "20"})
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,这不是正确的JSON,因为它具有parseResponse(前缀和)后缀.虽然这个例子非常简单,但实际响应可能很长,大约为100K.
我的风格:
public class MyType
{
public Decimal total;
public int lower;
public int upper;
}
Run Code Online (Sandbox Code Playgroud)
在我将Web服务响应转换为流和JsonTextReader之后,我尝试反序列化,如下所示:
(MyType)serializer.Deserialize(jsonTextReader, typeof(MyType));
Run Code Online (Sandbox Code Playgroud)
当然,我得到null的结果,因为有圆括号的那个讨厌的parseResponse.
我看过这个问题,遗憾的是没有帮助.我实际上是使用a JsonTextReader来输入JSON而不是字符串(并且更喜欢这样以避免创建巨大字符串的性能).即使我使用该问题的建议,它看起来很危险,因为它使用全局替换.如果没有好的方法来使用流,那么安全解析字符串的答案就可以了.