JSONP работает в jQuery, но не в mootools - PullRequest
1 голос
/ 12 апреля 2011

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

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

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

var url = <a href="http://localhost:3000/" rel="nofollow">http://localhost:3000/</a>

Сервер:

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) {
    }
});

Mootools:

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 12 апреля 2011

Как выглядит 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()
1 голос
/ 12 апреля 2011

В вашем коде была синтаксическая ошибка.

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

Кроме того, ответ должен быть обернут функцией обратного вызова, например: http://jsfiddle.net/zalun/yVbYQ/

0 голосов
/ 20 апреля 2015

Ваш 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/

...