2010-06-22 3 views
1

Я использую метод jquery ajax, устанавливаю datatype json, получаю ответ jsonp от междоменного сервера. Но то, что я хочу, - это сырая строка ответа json. поэтому я устанавливаю текст типа данных, но я получил только пустую строку.получение raw json string использование jquery ajax method meet problem

 $.ajax({ 
     url:"http://api.douban.com/book/subject/isbn/9787802057388?alt=xd&callback=?", 
     dataType:'text', 
     success:function(data){ 
      alert(data); 
     } //endof success 
    }); //endof .ajax 

Может ли кто-нибудь сказать мне, почему? если использовать getJSON метод для этого, как я могу получить сырую строку json?

ответ

2

Установка dataType на text предотвращает обработку jQuery в качестве JSONP. jQuery делает некоторые магии в фоновом режиме для этих типов запросов (подставляя callback=? в URL-адрес имени функции и определяя функцию success как глобальную функцию).

Почему вы хотите, чтобы ответ был сырым текстом? Невозможно получить ответ JSON из запроса JSONP, потому что характер JSONP требует, чтобы ответ был завернут в вызов функции.

Установка dataType на jsonp работает, но, конечно же, объект возвращается.

$.ajax({ 
    url:"http://api.douban.com/book/subject/isbn/9787802057388?alt=xd&callback=?", 
    dataType:'jsonp', 
    success:function(data){ 
     alert(data); 
    } //endof success 
}); //endof .ajax​​​​ 

Если вы хотите строку, вы можете дважды JSon кодировать часть ответа на сервере, так что оно получено в виде строки или использовать кодер JavaScript JSON на стороне клиента и кодировать его опять же, но оба действительно не идеальные решения. Объект гораздо более полезен и полезен.

+0

Причина в том, что я хочу получить ответ на междоменный jsonp и снова отправить его на свой веб-сервер. Чтобы избежать реакции дескриптора jquery как json, я изменяю .getJSON на .ajax, так что вы имеете в виду поле типа djatery ignore ignore для обработки ответа? – elprup

+0

@elprup: В этом случае клиент должен AJAX на вашем сервере, который должен получить информацию из удаленного домена, прежде чем возвращать ответ. Нет, я имею в виду, что jQuery требует, чтобы 'dataType' установлен в' jsonp', чтобы правильно подготовить запрос к выполнению запроса 'JSONP'. – Matt

+0

ОК. У запрашиваемого url есть ограничение по запросу на IP, поэтому я просто хочу, чтобы клиент извлекал информацию для сервера. – elprup