2013-12-20 5 views
0

Я вернул данные JSONP, которые отображаются в консоли, отформатированной должным образом.Пытается получить возвращаемые данные JSONP через jQuery.ajax()

group({ 
    "blah": "blah", 
    "blahblah": "blahblah", 
    "blahblahblah": "blahblahblah" 
}); 

Это мой вызов ajax.

$.ajax({ 
    type: 'GET', 
    url: 'test.php', 
    dataType: 'jsonp', 
    cache: false, 
    jsonpCallback: 'group', 
    statusCode: { 
    404: function() { 
     alert("page not found"); 
    } 
    }, 
    success: function(group){ 
    console.log(group); 
    $('#theTest').append(group.name); 
    }, 
    error: function(response1, response2, response3){ 
    console.log("Fail!"); 
    console.log(response1); 
    console.log(response2); 
    console.log(response3); 
    } 
}); 

JSON обернут «группой». Однако, когда я пытаюсь получить доступ к этим данным, я не могу этого сделать.

  • group.name, которое имеет значение в консоли, не отображается, когда я размещаю его на сайте.
  • группа [0] возвращает гайанскую
  • группы [1] возвращает г
  • группы [2] возвращает о

Я запутался, почему все это возвращается таким образом. Может ли кто-нибудь указать мне в правильном направлении?

+0

Почему вы настройки 'jsonpCallback:«group''? –

+0

Это хороший вопрос. Я не уверен. Я установил обратный вызов: «группа» внутри данных ранее, но переместил его. Мой PHP-файл ищет обратный вызов. – Dave

+0

Вам не нужно вручную устанавливать обратный вызов или его имя. Когда вы выполняете 'dataType: 'jsonp'', jQuery добавляет параметр' GET' к вашему URL с именем вызванного им обратного вызова: '$ _GET [' callback ']'. Вы должны использовать это при возврате PHP-скрипта: 'echo $ _GET ['callback']. '('. Json_encode ($ data). ')';'. –

ответ

1

Ваш Аякса запрос неверен, это должно быть что-то вроде

$.ajax({ 
    type: 'GET', 
    url: 'test.php', 
    dataType: 'jsonp', 
    cache: false, 
    jsonpCallback: 'group', 
    statusCode: { 
    404: function() { 
     alert("page not found"); 
    } 
    }, 
    success: function(group){ 
    console.log(group); 
    $('#theTest').append(group.name); 
    }, 
}); 

dataType, cache и callback не должны быть переданы в качестве полей данных и тип данных должен быть jsonp

+0

После внесения этого изменения, я получаю сообщение об ошибке, когда это выполняется. В частности, я получаю: parsererror и SyntaxError {} – Dave

+0

@Dave, какая строка в коде? – Musa

+0

response2 и response3 – Dave

0

Ошибка на сервере побочный ответ. Как работает JSONP, вы указываете известный параметр обратного вызова, который будет передан в запрос GET. На стороне сервера вам нужно извлечь этот параметр, чтобы получить вызов метода инкапсуляции для вашего дополнения JSON.

На вашем примере с jsonpCallback: 'группы', ваша серверная сторона должна:

$methodName = $_GET['group'] 
    $response = $methodName . '(' . <YOUR JSON RESPONSE> . ');' 
    echo $response 
Смежные вопросы