JSONP работает в jQuery, но не в mootools

Я пытаюсь преобразовать свой код в Mootools (мне больше нравится парадигма кодирования).

Я использую междоменный AJAX, где мне принадлежат оба домена (закрытая сеть). Я просто запрашиваю простой JSON со своего сервера. Я получаю эти ошибки в Mootools (jQuery работает):

Resource interpreted as Script but transferred with MIME type text/plain. Uncaught SyntaxError: Unexpected token :

var url = http://localhost:3000/

Сервер:

var http = require('http'),
    json = {"hi" : false};

http.createServer(function(req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end(JSON.stringify(json));
}).listen(3000, function() {
    console.log("Server on " + 3000);
});

jQuery:

$.ajax({
    url: url,
    type: "GET",
    dataType: 'json',
    success: function (data) {
    }
});

Инструменты:

var myRequest = new Request.JSONP({
    url: url,
    onComplete: function (data) {
        alert(JSON.stringify(data));
    }
});
myRequest.send();

Я пытался добавить эти заголовки безрезультатно.:

'Accept': 'application/json',
'Content-Type': 'application/json'

Кажется, это клиентская вещь, а не серверная, поскольку она работает в jQuery.


person beatgammit    schedule 12.04.2011    source источник


Ответы (3)


Как выглядит URL? jQuery определяет, что это запрос JSONP, добавляя ?callback= или ?foo= к URL-адресу. Request.JSONP вместо этого использует опцию callbackKey.

Для JSONP нет опции method (ни в одной библиотеке), так как он просто вставляет тег скрипта.

var myRequest = new Request.JSONP({
  url: url,
  callbackKey: 'callback'
  onComplete: function(data){}
}).send();

Однако у меня такое чувство, что вы используете не JSONP, а скорее XHR с JSON. В этом случае используйте Request.JSON, а не Request.JSONP.


Изменить

Поскольку из комментариев к этому ответу кажется, что вы не используете JSONP, просто сделайте следующее:

new Request.JSON({
  url: url,
  method: 'get',
  onSuccess: function (data){
    console.log(data)
  }
}).send()

Изменить 2

Чтобы изменить заголовки запроса, просто добавьте их в качестве опции:

new Request.JSON({
  headers: {
    'X-Requested-With': 'XMLHttpRequest',
    'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
  },
  url: url,
  method: 'get',
  onSuccess: function (data){
    console.log(data)
  }
}).send()
person Ryan Florence    schedule 12.04.2011
comment
Это просто обычный URL с портом. Например. stackoverflow.com: 3000. Мой хост что-то вроде mydomain.com:4000. Примечание: это не URL-адреса, а просто примеры. - person beatgammit; 12.04.2011
comment
По-видимому, мой коллега ограничил заголовки на веб-сервере. Я исправил это, просто используя XmlHttpRequest. По какой-то причине Mootools намеревался добавить дополнительные заголовки, которые мне не нужны. Вы знаете, как удалить заголовки по умолчанию? - person beatgammit; 14.04.2011
comment
Я отмечаю ваше как правильное, хотя это не решает мой вопрос напрямую. Как говорится в моем предыдущем комментарии, я заработал, избегая запроса Mootools. Все равно спасибо за ответ! - person beatgammit; 16.04.2011
comment
заголовки - это такая опция, как url ... поместите туда все, что хотите. Обновление ответа. - person Ryan Florence; 16.05.2011
comment
+1 Я только что перешел на Ender.js (знаю, вроде ADD), но буду использовать пакеты MooTools, и вроде должно работать! Спасибо! - person beatgammit; 16.05.2011
comment
Я вообще-то добавил все модули MooTools в NPM и поэтому эндер (сделал презентацию в Лехи, прямо к вам надо было приехать!) просто делаю так: ender build mootools-request-json - person Ryan Florence; 01.06.2011
comment
@rpflo Круто! Я не знал об этом, я бы пришел, если бы мог. В любом случае, мне придется проверить материал MooTools на NPM. Я устаю от jQuery-измов. - person beatgammit; 01.06.2011


Ваш вызов ajax должен быть таким

          $.ajax({
                type: "GET",
                url: "http://localhost:17370/SampleService.asmx/HelloWorld",
                data: "{}",
                crossDomain: true,
                contentType: "application/json; charset=utf-8",
                dataType: "jsonp",
               async:false,
                success:function(data,status){
                    alert(data);

                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    alert("Error Occured!" + " | " +
                    XMLHttpRequest + " | " + textStatus + " | " +
                    errorThrown);
                }
            });

Ваш метод на стороне сервера не должен возвращать простую строку, он должен возвращать ответ в формате jsonp, для этого вам нужно следить за этим блогом:

http://msrtechnical.blogspot.in/

person mohit singh rathore    schedule 20.04.2015