繁体   English   中英

使用jQuery使用JSONP在跨域上获取JSON

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM