Javascript 使用jquery通过jsonp跨域获取json

Javascript 使用jquery通过jsonp跨域获取json,javascript,jquery,ajax,json,Javascript,Jquery,Ajax,Json,我有一个非常简单的$.ajax调用,它假设从给定的url获取json数据。当前确实调用了url并返回了数据,但是localHsonpCallback函数似乎没有被触发 这是我的密码 function getBuildings(){ $.ajax({ url: 'http://localhost/api/users', type: "GET", dataType: "jsonp", jsonpCallback: "localJ

我有一个非常简单的$.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操作设置为false,然后在选项中设置回调

function getBuildings(){
    $.ajax({
        url: 'http://localhost/api/users',
        type: "GET",
        dataType: "jsonp",
        jsonp: false,
        jsonpCallback: "localJsonpCallback"
    });
}
因为javascript是顺序的,所以在调用函数之前定义它们也是一个好主意。ie-在ajax调用之前定义回调函数

jsonp

类型: 字符串重写JSONP请求中的回调函数名。 在“callback=?”部分中,将使用此值代替“callback” url中查询字符串的名称。因此{jsonp:'onJSONPLoad'}将产生 在“onJSONPLoad=?”中传递给服务器。从jQuery1.5开始,设置 jsonp选项设置为false可防止jQuery添加?回调 字符串到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
 };

这可能是服务器端的问题,即没有正确使用回调参数,或者服务器端不存在回调参数名称。他们正在查找不同的内容

你说结果正在返回,格式是什么?JSONP必须返回一个脚本块而不是纯数据,因此请确保结果的格式如下

{callbackFunctionName}({hugeDataFromServer});
基本上是脚本调用您的函数


如果不是服务器端,这意味着他们更有可能为回调参数使用不同的名称,例如cb、_callback等,那么您的代码正在工作,尽管该代码使用的是JSONP ie,但它被包装在函数中。返回的数据如下所示。[{id:1,name:Kanye},{id:2,name:Drake}]如果这是jsonp请求的输出,而不是调试结果,则是错误的。我相信服务器端没有为jsonp配置,或者您发送了错误的参数。可以为api/用户请求添加一些服务器端代码吗。