Yii2 - ответ JSONP ничего не возвращает (пусто) и не работает, но JSON делает

1

Я использую Yii2, и для чего он стоит, я знаю основы и программировал какое-то время. Вероятно, это связано с отсутствием документации в этой области (Yii2 JSONP и ответы). Все, что я нахожу, - это примеры возврата ответа JSON, и ни один из них не показывает ответ JSONP.

Я начал здесь, кулинарная книга Yii: https://github.com/samdark/yii2-cookbook/blob/master/book/response-formats.md

Он показывает только примеры JSON и XML, но не JSONP. В нем указано использование FORMAT_JSONP. Поэтому я заменил JSON-пример JSONP. Перейдите на URL-адрес, ничего, только пустую белую страницу. Поэтому я var_dump() данные, и да данные есть!

Поэтому после поиска Google для "yii2 jsonp", "yii2 jsonp error", "yii2 jsonp не работает", наряду с несколькими другими вариантами, я ничего не нашел. Я искал здесь SO, и только 2 вопроса появляются для "yii2 jsonp", ни одна из них не помогла.

Я перешел к документам Yii2. Здесь: http://www.yiiframework.com/doc-2.0/guide-runtime-responses.html Опять же, ни один пример JSONP и не так много говорить об этом, кроме FORMAT_JSONP является допустимым типом формата...

Я могу использовать JSON просто отлично, однако я пытаюсь заполнить карту Google данными из ответа JSONP, поэтому мне нужен JSONP.

Вот мой контроллер:

public function actionMapapi()
{
    \Yii::$app->response->format = \yii\web\Response::FORMAT_JSONP;
    $data = User::find()->all();

    return $data;
}

Когда я перехожу к URL-адресу, он просто белый. Я могу поместить штамп ('здесь') перед объявлением формата response->, и он печатает "здесь" на странице. Таким образом, к контроллеру обращаются очень хорошо. Если я поменяю FORMAT_JSONP на FORMAT_JSON он отлично работает, это просто не JSONP.

Кажется, есть пробел в том, как точно обрабатывать JSONP в документах Yii2, и не так много говорить об этом в Интернете (что я мог бы найти).

Теги:
yii2
yii
jsonp

1 ответ

4
Лучший ответ

Вам нужно вернуть массив, который определяет ваш callback и data. Это довольно скрыто и упоминается здесь: http://www.yiiframework.com/doc-2.0/yii-web-jsonresponseformatter.html

Говорится:

$ useJsonp Использовать формат ответа JSONP. Когда это так, данные ответа должны быть массивом, состоящим из элементов данных и обратного вызова. Последнее должно быть именем функции JavaScript, а первое будет передано этой функции в качестве параметра.

Практически никаких примеров, которые я мог бы найти, я просто попытался сделать очевидным:

return ['data' => $arrayData, 'callback' => 'myCallback'];

Это сработало!

Полный источник моего контроллера:

public function actionMapapi()
{
    \Yii::$app->response->format = \yii\web\Response::FORMAT_JSONP;
    $callback = 'mapApiCallback';
    $data = User::find()->all();

    return ['callback' => $callback, 'data' => $data];
}

ПРИМЕЧАНИЕ. Нет, я не заполняю свою карту пользователями. Это всего лишь пример, и данные печатаются на экране очень хорошо. Мне все равно нужно закодировать его, чтобы вытащить данные моей карты, чтобы перейти к моей карте Google.

Если кто-то заинтересован, я использую: 2Amigos: Yii2 Google Maps Library

Я не знаю, поддерживает ли он в настоящее время заполнение карты данными JSONP, но я, вероятно, продолжу ее, если придется.

  • 0
    Офигенно, отлично работает

Ещё вопросы

Сообщество Overcoder
Наверх
Меню