JSONP ajax调用了一个宁静的api

时间:2013-05-30 20:47:48

标签: php jquery ajax jsonp laravel

我已经搜索了几天,似乎没有人对此有明确的答案,我开始怀疑它是否是服务器/ api问题而不是ajax问题。

无论如何,我使用Laravel 4构建了一个API。我已经包含了以下链接

my question api

基本上它返回以下

{"error":false,"question":[{"id":1,"question_title":"Question 1","question_answer_a":"question1_answer_a","question_answer_b":"question1_answer_b","question_answer_c":"question1_answer_c","question_answer_d":"question1_answer_d","question_correct_answers":"a,b,c","question_explination":"question1_explinaition","question_meta":"question1_metadata","created_at":"2013-03-20 13:03:38","updated_at":"2013-03-20 17:30:10","status":1,"question_id":1,"image_url":"42ac1edf76f16924780df90ce5621476f7a263f7.jpg"}]}

现在我在本地工作并在一个简单的html页面中使用此ajax调用来检索api数据

$.ajax({ 
         type: "GET",
         dataType: "jsonp",
         contentType: "application/json",
         async: false,
         url: "http://wld-api.eu1.frbit.net/index.php/api/v1/question",
         success: function(data){        
            alert(data);
         }
     });

在Firefox firebug(NET选项卡)中,浏览器进行调用,返回200 OK响应和所有JSON数据。我可以单击Response和JSON选项卡,我的所有数据都在那里。

所以我的问题是......

为什么地狱不能成功解雇并提醒我的数据?如果我添加

error: function(data){        
        alert(data);
     }

它会发出警报,但firefox和其他一切都说它是成功的吗?

任何人都可以帮助我吗?

我刚刚在控制台的firebug中注意到它出错了

    SyntaxError: invalid label   -   "error":false,"question":[{"id":3,"question_title":"Question

并指向错误标签?这是一个阻止成功的问题,有人知道吗。

任何建议/解决方案都会成为我的一天

谢谢Sam

1 个答案:

答案 0 :(得分:2)

要使用JSONP,您必须tell Laravel to wrap the JSON in a callback function

return Response::json( $data )->setCallback( Input::get('callback') );

接下来,您必须将回调密钥添加到查询字符串中:

$.ajax({
     type: "GET",
     dataType: "jsonp",
     contentType: "application/json",
     async: false,
     url: "http://wld-api.eu1.frbit.net/index.php/api/v1/question?callback=?",
     success: function(data){        
        alert(data);
     }
});

注意:您可以使用jQuery的$.getJSON()方法代替$.ajax()。它更简洁:

$.getJSON("....../api/v1/question?callback=?").done(function ( data ) {
    alert( data );
});