Проблемы с jQuery, ajax и jsonp - PullRequest
       6

Проблемы с jQuery, ajax и jsonp

5 голосов
/ 01 февраля 2012

Я использую jsonp и ajax для доступа к веб-службе на другом сервере.Вот jQuery:

$.ajax({
  type: 'GET',
  url: wsurl + 'callback=?',
  dataType: 'jsonp',
  crossDomain: true,
  error: function(data) {
    console.log('error', data);
  },
  success: function(data) {
    console.log('success', data);
  },
  complete: function() {
    console.log('done');
  }
});

Проблема в том, что вызывается обратный вызов ошибки.Это дает мне эту удивительно полезную информацию:

{
  readyState: 4,
  status: 200,
  statusText: "success"
}

И вот файл json, который я вызываю:

{
  "id": 0,
  "room_number": "0",
  "first_name": "Admin",
  "last_name": "Istrator",
  "password": "",
  "salutation": "Mr.",
  "telephone": "",
  "email": "",
  "description": "admin",
  "checkin_date": 915797106000,
  "checkout_date": 4071557106000,
  "last_login_date": 947333106000,
  "active_status": true,
  "created_date": 915797106000,
  "created_by": 0,
  "reference_id": ""
}

Сначала я попытался использовать метод jQuery getJSON, с тем же результатом.Думаю, я бы попробовал базовый метод ajax, так как он имеет немного больше контроля, но, как видите, не повезло.Так, заметьте, что я делаю не так?Есть идеи, почему он выдает ошибку и дает мне успешное значение для свойства statusText?

EDIT

Хорошо, я добавил некоторые параметры в вызов ajax и удалил параметр обратного вызова изURLВот новый вызов ajax:

  $.ajax({
    type: 'GET',
    url: wsurl,
    dataType: 'jsonp',
    crossDomain: true,
    error: function(xhr, textStatus, errorThrown) {
      console.log('textStatus: ' + textStatus);
    },
    success: function(data) {
      console.log('success');
      console.log(data);
    }
  });

Я получаю новую ошибку, которая, я полагаю, хороша, но все еще не работает.Разница в том, что textStatus теперь "parsererror".Консоль также выдает синтаксическую ошибку в первой строке файла json:

Uncaught SyntaxError: Unexpected token :

Идеи?

Ответы [ 3 ]

1 голос
/ 01 февраля 2012

Хорошо, пара вещей выпрыгивает на меня:

$.ajax({
  type: 'GET',
  #You do not need to append the callback as you have jsonp configured it will  do it    
  #automatically append the callback=<auto generated name>
  url: wsurl, 
  dataType: 'jsonp',
  crossDomain: true,
  error: function(data) {
    console.log('error', data);
  },
  success: function(data) {
    console.log('success', data);
  },
  complete: function() {
    console.log('done');
  }
});

Кроме того, ваше возвращение не должно быть заключено в функцию, которая требуется для работы jsonp.

<auto generated name>({ json object })

Функция обратного вызова будет названа jquery автоматически. Поэтому вам нужен сервис, который будет принимать параметр обратного вызова и возвращать объект json с отступом.

0 голосов
/ 01 февраля 2012

Удалите обратный вызов из URL и попробуйте обернуть ваш json чем-то вроде этого (пример php, $ _GET ['callback'] автоматически устанавливается jQuery):

$_GET['callback'] . '({
  "id": 0,
  "room_number": "0",
  "first_name": "Admin",
  "last_name": "Istrator",
  "password": "",
  "salutation": "Mr.",
  "telephone": "",
  "email": "",
  "description": "admin",
  "checkin_date": 915797106000,
  "checkout_date": 4071557106000,
  "last_login_date": 947333106000,
  "active_status": true,
  "created_date": 915797106000,
  "created_by": 0,
  "reference_id": ""
})'
0 голосов
/ 01 февраля 2012

Не уверен, что это проблема, но ваш URL неверен. Согласно документам jQuery, он должен автоматически добавлять? Callback =? для вас:

http://api.jquery.com/jQuery.ajax/

...