2014-01-20 5 views
1

Я пытаюсь настроить простой интерфейс для тестирования API Basecamp. Я установил свой dataType = jsonp, чтобы избежать проблемы междоменного доступа. При совершении вызова я вижу в инспекторе, что ответ отправляет правильно отформатированный JSON. Однако мои оповещения об ошибках показывают 4 и 200, но затем текст ответа «не определен». Я предполагаю, что я неправильно перехожу из jsonp в json, но мне нужно, чтобы я получил ответ, который я хочу? Или я не получаю правильный ответ.JQuery Cross Domain GET Request Not Working

Код:

function findAllProjects() { 
    console.log('findAllProjects'); 
    $.ajax({ 
     type: 'GET', 
     url: rootURL + "projects.json", 
     username: "username", 
     password: "password", 
     crossDomain: true, 
     //contentType: "application/json", 
     dataType: "jsonp", // data type of response 

     success: function(data) { 
      alert(data[0].id); 
      console.log("Success function!"); 
      console.log(data); 
     }, 

     error: function(xhr, err) { 
      //alert("Error!"); 
      alert("readyState: "+ xhr.readyState+"\nstatus: "+ xhr.status); 
      alert("responseText: "+ xhr.responseText); 
     }, 
    }); 
} 
+0

Вы не можете отправить имя пользователя/пароль с запросом JSONP, кроме тех, что URL-параметров. –

+0

http://stackoverflow.com/questions/3295692/does-jsonp-require-server-modifications –

ответ

0

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

+0

API возвращает только json. Я установил jsonp, потому что это единственный способ заставить его выполнить. Я возвращаю ответ json с данными. – porterhaus

+1

@porterhaus, тогда невозможно запросить указанные данные, используя только код на стороне клиента, если вы не измените ответ на стороне сервера ни на поддержку CORS, ни на JSONP. в настоящее время, похоже, не поддерживает ни того, ни другого. –

+0

Спасибо. Я закончил то же самое после изучения нескольких других выпусков. В конечном итоге они планируют поддержку. – porterhaus

0

Серверная сторона должна обертывать данные Джейсона вызовом функции. Имя функции передается в URL-адресе как «? Callback =?».

Таким образом, вместо того, чтобы просто возвращаем объект JSon {...} fromt он-сервер, вам необходимо вернуть

SomeFunctionName({...}); 
+0

Является ли это функцией ответа на стороне сервера или могу ли я запросить его в соответствии с моим запросом? – porterhaus

+0

jQuery передает имя функции в запросе, используя параметр обратного вызова в URL-адресе. SomeFunctionName должно быть тем, что находится в параметре обратного вызова, и является частью ответа на стороне сервера. – Ceres