JQuery Json Доступ к списку Sharepoint через отдых - PullRequest
8 голосов
/ 28 июля 2011

Я пытаюсь получить доступ к списку sharepoint через Jquery и интерфейс REST. Сайт с кодом ниже работает localhost.

Этот код не работает:

$(document).ready(function() { getdata(); });

function getdata() {

    alert("start");

    $.ajax({
        url: "http://spkerberostest.vz.ch/_vti_bin/ListData.svc/Tasks",
        dataType: 'JSON',
        success:function(json) { alert ("Success");
        },
        error:function(){
            alert("Error");
        }
    });        
};

Я получаю сообщение об ошибке «Происхождение http://localhost:59936 не разрешено Acess-Control-Allow-Origin.»

Я не уверен, в чем причина. Является ли тот факт, что Sharepoint требуется аутентификация (анонимная блокируется), или это междоменный вызов? Или даже оба?

Что я могу сделать? Я где-то читал о JSONP как тип данных. Но это не сработало. Спасибо.

Ответы [ 4 ]

6 голосов
/ 08 мая 2012

Предполагая, что оба эти ресурса являются внутренними для вашей компании, и вы всегда получаете доступ друг к другу, ваш администратор Sharepoint может попытаться включить так называемые заголовки CORS (Cross Origin Resource Sharing) на серверах Sharepoint IIS.

Это позволит успешно завершать вызовы из разных источников, так как браузер и серверы обмениваются заголовками, запрашивающими обмен из разных источников. Вы можете узнать больше о CORS на http://enable -cors.org /

Относительно ответа 3nigma. Флаг JQuery crossDomain не будет работать, потому что службы Sharepoint не спроектированы как JSONP сервисы, что Jquery пытается использовать, когда вы устанавливаете этот флаг. (Сервер Sharepoint должен был бы дополнить данные, как если бы это был файл Javascript с одним объектом JSON, но я не знаю, как это настроить.)

0 голосов
/ 28 мая 2014
<script type="text/javascript">
$(document).ready(function() { getdata(); });

function getdata() {

    alert("start");

    $.ajax({
        url: "http://yourserver/_api/Web/Lists/getByTitle('yourlist
')/items/",
        type: "GET",
        headers: {
            "accept": "application/json;odata=verbose",
        },
        success:function(json) { alert ("Success");
        },
        error:function(){
            alert("Error");
        }
    });        
};
</script>
0 голосов
/ 22 мая 2012

На всякий случай, если кто-то еще пытается решить эту проблему, я установил это в своей среде, установив для jquery, suoport.cors значение true.код:

$.support.cors = true;
$.ajax({
crosDomain:true,    
    url: listUrl,
    success: getItemsSuccess,
    error: jqueryError,
    dataType:'json'

});

это позволяет мне получить доступ к списку на другом физическом сервере.Никаких изменений в iis не требовалось.JSONP не требуется.

0 голосов
/ 09 декабря 2011

Вместо этого вам нужно позвонить на свой собственный сервер, а затем сделать так, чтобы ваш сервер вызвал SharePoint Server. Предполагая, что вы используете средний уровень C #, это будет выглядеть примерно так:

  public string getJson()
    {
        WebClient wc = new WebClient();
        wc.Credentials = new System.Net.NetworkCredential("[user]", "[password]", "[domain]");
        var url = "[some url in the 12 hive that can return json]";

        var result = wc.DownloadString(url);

        return result;
    }

Конечно, вам нужно добавить код для вывода json обратно на ваш клиент, но код выше показывает, как вы можете получить необходимые данные SP.

Спасибо

Мэтт

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...