[英]Getting json on cross domain with jsonp using jquery
我有一个非常简单的$ .ajax调用,该调用假定是从给定的URL获取json数据。 当前,URL确实会被调用,并且数据确实会返回,但是localHsonpCallback函数似乎没有被触发。
这是我的代码。
function getBuildings(){
$.ajax({
url: 'http://localhost/api/users',
type: "GET",
dataType: "jsonp",
jsonpCallback: "localJsonpCallback"
});
}
function localJsonpCallback(json) {
console.log("Fired");
if (!json.Error) {
console.log("Fired");
}
else {
console.log("ERROR");
}
}
因此,如上所述,出于某种原因,localJsonpCallback似乎根本没有被解雇。
另外我应该提到,在我的Chrome开发工具中,请求链接最终看起来像这样
http://localhost/api/users?callback=localJsonpCallback&_=1429708885454
在这个问题上的任何帮助将不胜感激。
谢谢。
直接在参数列表中尝试将回调方法作为匿名函数使用。
function getBuildings(){
$.ajax({
url: 'http://localhost/api/users',
type: "GET",
dataType: "jsonp",
jsonpCallback: function(data){
console.log("Fired");
if (!data.Error) {
console.log("Fired");
}
else {
console.log("ERROR");
}
}
});
}
如果您没有将回调附加到url上,则可以将jsonp oprion设置为false,然后在执行操作时,在选项中设置回调。
function getBuildings(){
$.ajax({
url: 'http://localhost/api/users',
type: "GET",
dataType: "jsonp",
jsonp: false,
jsonpCallback: "localJsonpCallback"
});
}
由于javascript是顺序的,因此在调用函数之前定义它们也是一个好主意。 即-在ajax调用之前定义回调函数。
http://api.jquery.com/jQuery.ajax/
jsonp
类型:
字符串覆盖JSONP请求中的回调函数名称。 这个值将被用来代替'callback'
在'callback=?'
网址中查询字符串的一部分。 因此{jsonp:'onJSONPLoad'}
将导致'onJSONPLoad=?'
传递给服务器。 从jQuery 1.5开始,将jsonp选项设置为false可防止jQuery将"?callback"
字符串添加到URL或尝试使用"=?"
进行转化。 在这种情况下,您还应该显式设置jsonpCallback设置。 例如,{ jsonp: false, jsonpCallback: "callbackName" }
也许这段代码将有助于解决您的问题:
$.ajax({
type: 'GET',
url: 'http://localhost/api/users',
data:{todo:"jsonp"},
dataType: "jsonp",
crossDomain: true,
cache:false,
success: success,
error:function(jqXHR, textStatus, errorThrown){
alert(errorThrown);
}
});
var success = function(data){
/* parse JSON */
data = $.parseJSON(data);
//your code here
};
这是服务器端的问题,即回调参数未正确使用,或者它们正在寻找不同的服务器端的参数名称callback
不存在。
您说结果正在返回,格式是什么? JSONP必须返回不是纯数据的脚本块,因此请确保结果采用以下格式。
{callbackFunctionName}({hugeDataFromServer});
基本上是脚本调用您的函数。
如果不是服务器端,则意味着它们更有可能使用其他名称作为callback
参数,例如cb
, _callback
等
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.