2015-11-26 3 views
0

Я пытаюсь вернуть ответ с веб-сервера. Для этого я использую сценарий ajax для отправки запроса и получения данных json или xml. Веб-сервер Indy. Я не знаю такого сервера и не имею возможности изменять конфигурацию.Проблема с jquery Ajax при получении данных с сервера

Я сделал два сценария js. Первый отправляет запрос на веб-сервер Django. После изменения конфигурации, чтобы разрешить запрос CROS, клиентская сторона вернет данные с сервера. Второй отправляет запрос на веб-сервер Indy. После изменения запроса ajax (datatype = "script"), я возвращаю ответ, но этот почки пусты.

Различия между 2 полученными ответами получены из заголовка ответа. С Инди веб-сервера, я получаю:

Content-Disposition: "рядный; имя файла =" toto.dat ""
Content-Type: "приложения/октет-поток"

Напротив, от Django это

Content-Type: "application/json".

Вот мой код

$("#button1").click(function(){ 
    alert("Script 1"); 

    // Script to request on Django web server 

    $.ajax({ 
     url: "http://localhost:80/polls/getid", 
     crossDomain: true, 
     dataType: "json", 
     success: function (xhr, status, response) { 
      alert("coucou"); 
      var resp = JSON.parse(response.responseText); 
      alert(resp.id); 
     }, 
     error: function (xhr, status) { 
      alert("error"); 
     } 
    }); 
}); 


$("#button2").click(function(){ 
    alert("Script 2"); 

    // Script to Indy web server 

    $.ajax({ 
     url: "http://localhost:8080/index_xml?callback=?", 
     crossDomain: true, 
     dataType: "script", 
     success: function (xhr, status, response) { 
      alert(response); 
      var resp = JSON.parse(response.responseText); 
      alert(resp.id); 
     }, 
     error: function (xhr, status) { 
      alert("error"); 
     } 
    }); 
}); 

Это заголовки:

Header ответ сценарий 1

HTTP/1.0 200 OK
Дата: Чт, 26 ноября 2015 13:40:00 GMT
Сервер: WSGIServer/0,1 Python/2.7.9
контроля доступа-Allow-Origin: *
Content-Type: применение/JSON
X-Frame-Options: SAMEORIGIN

Header ответ сценарий 2

HTTP/1.1 200 200 OK
Подключение: закрыть
Content-Type: применение/октет-поток
Content-Length: 92
Content-Disposition: встроенный; имя файла = «job00ZT6VI8NQO9O09479E0E1B.dat»
Сервер: Инди/9.0.18

У вас представление о том, как обращаться в JS скрипт Инди ответ. Наверное, я получаю файл вместо некоторых данных. Но я совсем потерялся.

+2

Это поможет, если вы разместите часть своего кода – yarons

+1

Вы можете объяснить тысячами абзацев, но мы лучше понимаем код, чем объяснение слова. поделитесь своим кодом, пожалуйста. –

ответ

0

)

Я нашел решение. Впервые я прочитал о JSONP, я не совсем понял, о чем. Поэтому я пробовал несколько вещей без успеха.

Я снова прочитал о JSONP и, наконец, понял, что когда ajax отправляет запрос с обратным значением, сервер должен использовать этот атрибут в качестве функции для ответа клиенту.

Пример:

АЯКС сторона:

http://...?callback=jQuery111109043251063544318_1448672067019 

стороне сервера ответ:

jQuery111109043251063544318_1448672067019({"id":"1234"});

@ViRuSTriNiTy Большое спасибо за вашу помощь

0
$("#button1").click(function(){ 
    alert("Script 1"); 

    // Script to request on Django web server 

    $.ajax({ 
     url: "http://localhost:80/polls/getid", 
     crossDomain: true, 
     dataType: "json", 
     success: function (xhr, status, response) { 
      alert("coucou"); 
      var resp = JSON.parse(response.responseText); 
      alert(resp.id); 
     }, 
     error: function (xhr, status) { 
      alert("error"); 
     } 
    }); 
}); 


$("#button2").click(function(){ 
    alert("Script 2"); 

    // Script to Indy web server 

    $.ajax({ 
     url: "http://localhost:8080/index_xml?callback=?", 
     crossDomain: true, 
     dataType: "script", 
     success: function (xhr, status, response) { 
      alert(response); 
      var resp = JSON.parse(response.responseText); 
      alert(resp.id); 
     }, 
     error: function (xhr, status) { 
      alert("error"); 
     } 
    }); 
}); 
+0

Что это значит? Ответ, редактирование вашего вопроса или что? – ViRuSTriNiTy

0

Почему вы установите dataType: "script" вместо dataType: "text" при попытке получить доступ к response.responseText в success()? Не имеет смысла, поэтому измените dataType на text, он должен работать.

Вы также можете попробовать установить converters.

+0

Потому что, если я перехожу от сценария к другому виду данных, я получаю ошибку CROS на стороне клиента. И у меня нет возможности изменять конфигурацию сервера. – HansB

+0

@ HansB Хорошо, теперь мой ответ указывает на дополнительный подход с использованием конвертеров, надеюсь, что это сработает. – ViRuSTriNiTy

+0

Хорошо, я посмотрю на конвертер. Но одна вещь, которую я не понимаю, заключается в том, что если я добавлю контрольную точку в ответ на строку (ответ), в отладчике Firefox, в объекте xhr или response ничего нет. – HansB

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