2013-05-30 2 views
0

Я искал дни, и никто, кажется, не дал окончательного ответа на этот вопрос, я начинаю задаваться вопросом, является ли его проблемой server/api, а не ajax.JSONP ajax call to restfull api

Любой способ, которым я построил API, используя Laravel 4. его мертвый простой ничего сложного. я включил ссылку

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. я могу щелкнуть вкладку «Ответ» и «JSON», и все мои данные есть.

Так что мой вопрос ....

Почему, черт возьми, не успех огня и предупредить мои данные? если я добавлю

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

он предупреждает, но firefox и все остальное говорит, что это успех?

Может ли кто-нибудь мне помочь?

я только что заметил в поджигатель в консоли при ошибках он говорит

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

и указывает на этикетке ошибки? это проблема, которая останавливает успех в огне, кто-нибудь знает.

Любые советы/решение было бы сделать мой день

Благодаря Сэм

ответ

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); 
}); 
+0

Ничего себе потрясающий спасибо. Теперь я задаюсь вопросом, есть ли проблема с бета-версией Laravel, которую я использую, когда получаю ошибку, например, Ошибка: вызов неопределенного метода Illuminate \ Http \ Response :: setCallback() в/var/www/web/wld-api/htdocs/app/controllers/QuestionsController.php line 25 ' Я попытаюсь отслеживать это, если у вас нет идеи? он появится setCallback() - проблема – user1997198

+0

@ user1997198 - Это работает для меня. ['Response :: json()'] (https://github.com/laravel/framework/blob/master/src/Illuminate/Support/Facades/Response.php#L46-L54) возвращает ['JsonResponse'] (https://github.com/laravel/framework/blob/master/src/Illuminate/Http/JsonResponse.php), который расширяет класс [JsonResponse' Symfony] (https://github.com/symfony/symfony/blob/master/src/Symfony/Component/HttpFoundation/JsonResponse.php), который, в свою очередь, [реализует 'setCallback '] (https://github.com/symfony/symfony/blob/master/src/Symfony/Component/HttpFoundation/JsonResponse.php#L64-L80). –