2013-07-02 8 views
1

У меня есть экземпляр ServiceNow, и я пытаюсь вытащить всех пользователей с помощью библиотеки JSON. Я могу легко увидеть список пользователей JSON, если я набираю URL-адрес, который сбрасывает эти данные, я пытаюсь создать веб-страницу, которая возьмет этот список JSON и сделает список пользователей из него. Я продолжаю сталкиваться с проблемами перекрестного домена, CORS недоступен для меня, поэтому я пытаюсь динамически загружать скрипты в соответствии с информацией пользователя. Это код, который я пытаюсь получить.Использование динамических скриптов для загрузки данных JSON - перекрестный домен - CORS не доступен

 function test() { 
     var username = document.getElementById("username").value; 
     var password = document.getElementById("password").value; 
     var domain = document.getElementById("domain").value; 
     var targeturl = "https://" + username + ":" + password + "@" 
      + domain + "/sys_user_list.do?JSON&sysparm_action=getRecords"; 
     $.getScript(targeturl + "&callback=dumpData") 
     function dumpData(data) { 
      alert(data); 
     } 
    } 

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

неперехваченного SyntaxError: Неожиданное фишку:

Как я должен сделать вызов getScript, так что я могу получить мои JSON данные? Является ли это даже допустимым методом, я наткнулся на него, пытаясь понять эту проблему, и это похоже на мой единственный вариант. Я пробовал YQL, но это не работает.

EDIT:

Я переделан код, чтобы воспользоваться $ .ajax, вот код

  $.ajax({ 
      url: 'https://' + username + ':' + password + "@" + domain + '/sys_user_list.do?JSON&sysparm_action=getRecords&callback=test', 
      type: "GET", 
      success: function (data) { 
       alert("hello"); 
      }, 
      crossDomain: true, 
      dataType: "jsonp", 
      jsonpCallback: 'test' 
     }); 
     function test(data) { 
      alert("It worked!"); 
     } 

Я обыскивал все сообщения, связанные с ли это все еще может «Нет. У кого-нибудь есть рекомендации относительно того, как исправить эту ситуацию? Он по-прежнему получает неверную синтаксическую ошибку. Невозможно получить данные JSON?

Я также попытался использовать YQL для получения данных, но также сталкивается с проблемами безопасности.

Спасибо,

Chris

+0

Вы пытались определить обратный вызов перед '$ .getScript()'? – Corion

+0

Похоже, вы пытаетесь использовать JSONP, и да, это должен быть допустимый метод. Я не думаю, что у вас есть синтаксис совершенно правильно - посмотрите [.getJSON] (http://api.jquery.com/jQuery.getJSON/) в документах jQuery. –

+0

Если я использую .getJSON, тогда я получаю ошибку перекрестного домена. –

ответ

0

Может быть, вы должны попробовать $.ajax({}); вместо $.getSrript();, чтобы сделать Междоменное Е.Г. $.ajax({url: "your_url.php",dataType; "jsonp",success: function(data){ document.write(data);} });

+0

Итак, я попробовал ваши предложения, и мы выглядим ближе, но теперь у меня две разные проблемы. Я продолжаю работать с синтаксической ошибкой, по какой-то причине ей не нравится: между моим именем пользователя и паролем. Если я кодирую URL-адрес, он пытается подключиться к серверу, добавив http: // localhost, а затем ссылку, которую я пытаюсь ударить. Но если я ввожу свой url как одну строку, я получаю ошибку типа mime. –

+0

Mmmh, это как превращение в другую неизвестную ошибку, вы уверены, что указали именно «url»? Возможно, проблема связана с вашим файлом 'xml сервера '. Вы должны попробовать и провести исследование! –

+0

Я прорыл много сообщений, связанных с этой ошибкой, и все они, похоже, рекомендуют одно и то же, и это не работает. :( –

1

Из моего опыта, используя плагин JSON Web Services на Калгари, ServiceNow не поддерживает JSONP, только JSON.

Возможно, вам понадобится создать собственный скриптовый веб-сервис, чтобы получить нужный формат. Я не вижу, чтобы JSONP прибыл в Дублин.

пример Ссылка: https://<instance>.service-now.com/<table>.do?JSON&sysparm_action=getRecords&displayvalue=true

displayvalue=true свопы sys_id для ссылочных полей в удобочитаемом альтернативы.

Чтобы получить доступ к структуре данных, это так просто, как:

function callMe() { 

    $.getJSON('url.json', function(myData) { 

    for (n = 0; n < myData.records.length; n++) { 
     console.log(myData.records[n].<column1> + '\n' + 
       myData.records[n].<column2> + '\n' + 
       myData.records[n].<column3> + '\n' + 
       myData.records[n].<column4> + '\n\n' 
       ); 
    } 
    }); 
}; 

Вы могли бы быть лучше использовать CMS/желе, чтобы сделать этот список.

+0

Ваша ссылка, кажется, сломана – Math