跨域ajax的问题

时间:2012-11-13 09:14:54

标签: jquery ajax cross-domain syntax-error

我很容易从http://bootcamp.jit.su/welcome/marian

获取消息

这是我正在使用的代码

<!DOCTYPE html>
<html>
    <head>
        <script src="http://code.jquery.com/jquery-latest.js"></script>
        <meta charset="utf-8" />
        <title>Globant :: Welcome to the HTML5 bootcamp</title>
    </head>
    <body>

    </body>
        <script type="text/javascript">
        $(document).ready(function(){
            var URL = "http://bootcamp.jit.su/Welcome/marian?callback=?";
            var request = jQuery.noConflict().ajax({
                    url: URL,
                    type: "GET",
                    dataType: 'jsonp',
                    processData: false,
                    success: function(data) {alert('hola') ;}
            });
        });

    </script>

</html>

它似乎应该可以正常工作,但我在控制台中不断收到错误消息:“意外':'字符'

1 个答案:

答案 0 :(得分:1)

事情是JSONP不是一个真正的AJAX请求。这是一种欺骗浏览器的解决方法,它通过向标头插入脚本标签来实现。想想,这是您的JSONP支持的URL

  

domain.com/jsonp.aspx?callback=的 processJSONP

processJSONP是您页面中已有的函数,请求返回类似于此的脚本

processJSONP( {
    "glossary": {
        "title": "example glossary",
        "GlossDiv": {
            "title": "S",
            "GlossList": {
                "GlossEntry": {
                    "ID": "SGML",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    },
                    "GlossSee": "markup"
                }
            }
        }
    }
});

它使用您需要的数据调用您的函数,并且您可以执行您想要执行的操作。当然,数据不必是JSON对象,也可以获得更多回调,如

processJSONP("data1=11");
processJSONP("data2=22");
processJSONP("data3=33");

因此,如果URL不支持,您将无法获得所需的数据。

要实现您想要的功能,您必须使用服务器端脚本(例如ASP.Net,PHP等)并通过服务器端对象(WebRequest,HttpRequest)请求内容,当您获得它时,您可以使用它作为JSONP或标准AJAX请求,就像它现在在您自己的域中一样。

希望这能清除一切。