2013-03-25 3 views
1

У меня есть небольшая проблема, заключающаяся в том, что вы не можете получить ответ csv.Невозможно получить текст CSV через запрос ajax

Там есть CSV можно посмотреть здесь link to csv

Я пытаюсь получить эти данные, однако существует проблема со специальными символами в réponse.

Я успешно Получать данные, но затем JQuery пытается декодировать его и через синтаксической ошибки: Мой запрос:

$.ajax({ 
    url: 'http://toolserver.org/~daniel/WikiSense/Contributors.php?wikilang=en&wikifam=.wikipedia.org&page=Cloud+computing&since=&until=&grouped=on&order=-edit_count&max=1000&order=-edit_count&format=csv', 
    dataType: "script", 
    success: function(data){ 
     alert('success'); 
    }, 
    error: function(test1, test2, test3) { 
     alert('error'); 
    } 
}); 

Ошибка (указывает на символ%)

SyntaxError: syntax error 
1004+%28922%2F82%29,SamJohnston,2008-07-26+09%3A40,2013-03-07+18% 

Я также попытался установить тип данных в текст, чтобы не расшифровать данные. В этом случае я получаю сообщение об ошибке для запроса ajax.

$.ajax({ 
    url: 'http://toolserver.org/~daniel/WikiSense/Contributors.php?wikilang=en&wikifam=.wikipedia.org&page=Cloud+computing&since=&until=&grouped=on&order=-edit_count&max=1000&order=-edit_count&format=csv', 
    dataType: "text", 
    success: function(data){ 
     alert('success'); 
    }, 
    error: function(test1, test2, test3) { 
     alert('error'); 
    } 
}); 

Я пытался экспериментировать с .ajax() параметры CONTENTTYPE, DATATYPE, scriptCharset и т.д. Это не поможет.

ответ

0

Мне кажется, что это междоменный запрос, который неприемлем. Прочитайте here и here для получения дополнительной информации

1

dataType: "text" будет правильным. Похоже, вы работаете в Same Origin Policy, что предотвращает междоменные вызовы. Когда вы сказали dataType: "script", jQuery автоматически преобразовал запрос в добавление элемента script вместо того, чтобы выполнять фактический вызов ajax. Добавление script элементов, которые ссылаются на междоменные скрипты, не является нарушением SOP (поэтому мы можем использовать CDN, такие как Google и Microsoft для обычных скриптов). Но вы не можете этого сделать, хватая CSV, потому что CSV не является (конечно) действительным кодом JavaScript.

Если сервер, из которого вы извлекаете данные, находится под вашим контролем, и если вы используете современный браузер (который in this case означает любую неопределенную последнюю версию Chrome, Firefox или Opera или с использованием IE9 или выше), вы может реализовать Cross-Origin Resource Sharing, что позволяет выполнять переадресации ajax-вызовов, если сервер разрешает исходное происхождение запрашивающего документа. CORS в основном означает ответ на HTTP-вызов OPTIONS, который спрашивает, нормально ли отправлять вызов ajax с соответствующими заголовками.

+0

Каждый раз, когда я сталкиваюсь с этой проблемой кросс-происхождения. В этом случае это простой простой текст, который я пытаюсь извлечь. Что может быть причиной этого, чтобы нарушить политику кросс-происхождения? Что отличает меня от этого URL-адреса в браузере и отображения этого простого текста? К сожалению, сервер не находится под моим контролем. – eveferon

+0

@eveferon: существует огромная разница между веб-страницей, которую пользователь загружает, запрашивая ресурс из совершенно другого местоположения, и сам пользователь делает это (путем вставки URL-адреса в адресную строку). Существует несколько причин для SOP, вы можете найти [этот вопрос и его ответ] (http://stackoverflow.com/questions/1830050/why-same-origin-policy-for-xmlhttprequest). –

+0

Благодарим вас за ответ. Я уверен, что многие люди задаются вопросом о том же вопросе. Таким образом, упрощенное сообщение для людей, имеющих одну и ту же проблему: Если ваш браузер отображает что-то из чужого домена и имеет доступ к соответствующим объектам, это не обязательно означает, что вы можете получить доступ к нему программно. – eveferon

Смежные вопросы