如何在JavaScript中使用JSONP请求执行Ajax调用?

时间:2016-12-29 06:43:56

标签: javascript ajax

我使用纯JavaScript在另一个域(跨域)中进行ajax调用。

所以我需要指定 dataType 。但我不知道,在哪指定?

我使用以下内容使用javascript进行ajax调用:

    var xmlhttp = new XMLHttpRequest();
    var url = 'www.mydomain.com/path/to/reach';

    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == XMLHttpRequest.DONE) {
            if (xmlhttp.status == 200) {
                console.log('Log : ' + url + ' || Updated.');
            }
            else if (xmlhttp.status == 400) {
                alert('There was an error 400');
            }
            else {
                alert('something else other than 200 was returned');
            }
        }
    };

    url = url + '?callback=my_callback_method';

    xmlhttp.open("GET", url, true);
    xmlhttp.send();

我也进行虚拟回调,

   function my_callback_method(res){
    //
   }
但是,它不会起作用。我收到错误原因:CORS标题'Access-Control-Allow-Origin'缺失

我的代码出了什么问题?

有可能吗?

任何解决方案?

(我只需要JavaScript解决方案!)

2 个答案:

答案 0 :(得分:2)

我终于偶然发现了这个链接"A CORS POST request works from plain javascript, but why not with jQuery?",它指出jQuery添加了

 Access-Control-Request-Headers: x-requested-with

所有CORS请求的标头。 jQuery 1.5.2没有这样做。另外,根据同样的问题,设置服务器响应头

Access-Control-Allow-Headers: *

不允许继续响应。您需要确保响应标头具体包含所需的标头。即:

Access-Control-Allow-Headers: x-requested-with 

答案 1 :(得分:2)

  

我得到错误原因:CORS标题'Access-Control-Allow-Origin'   丢失。

这是因为您使用XMLHttpRequest并且XMLHttpRequest的使用需要CORS。 JSONP技术并未涉及XMLHttpRequest的使用。 JSONP中的技巧是创建一个script标记并让浏览器加载该脚本:

var script = document.createElement('script');
script.src = '//domain.com/path/to/jsonp?callback=my_callback_method'

document.getElementsByTagName('head')[0].appendChild(script);

此外,您需要创建一个全局函数,在您的情况下为my_callback_method,并从jsonp脚本中调用它。

当然,您的服务器端应该具有以下实现:当获得对//domain.com/path/to/jsonp的请求时,它应该返回一个js文档,其中调用callback=my_callback_method中指定的全局函数:

my_callback_method()