为什么JSONP使用JSON格式的数据?

时间:2015-10-05 08:52:05

标签: ajax jsonp

我在我的一个项目中使用了一个URL,它运行得很好。我从一个Web服务器发出请求,到另一个IP地址,调用以这种格式输出数据的页面:

[{"PhoneNumber":"+123456789","Name":"Mark"},
{"PhoneNumber":"+123456789","Name":"Josh"},
{"PhoneNumber":"+123456789","Name":"Alex"},
{"PhoneNumber":"+123456789","Name":"John"},
{"PhoneNumber":"+123456789","Name":"Sean"}] 

我可以通过函数调用来获取和处理这些数据,例如:

$.ajax({ 
    url: serverAddress + "/getpeople", 
    dataType: "jsonp",
    timeout: 4000,
    success: function(response) {
        for(var i in response) {
            alert(response[i].Name);
        }
    }
});

这让我很困惑。从我到目前为止所学到的JSONP,它实际上不是数据,而是一个函数。所以响应应该包含在函数调用中,例如callback(),然后我可以在我的项目中实现function callback(data) {}来处理数据。

但在这种情况下,数据似乎只是JSON数据,我认为应该导致产生跨源错误?但事实并非如此。

当我尝试从同一台服务器调用另一个URL,获取一个普通的纯文本文件时,我确实收到了一个跨源错误,它在控制台中抱怨:

  

原因:CORS标题'Access-Control-Allow-Origin'缺失

但原始getpeople网址也没有该标头。当我在Firefox的文档检查器中检查响应头时,所有头都是:

Connection: "close"
Content-Type: "text/html;charset=utf-8"
Date: "Mon, 5 Oct 2015 08:29:07 GMT"
Server: "ServerName/1.1.10011.2211"

所以:

  1. 数据未格式化为JSONP回调
  2. 使用与Web应用程序不同的IP地址提供服务
  3. 响应没有Access-Control-Allow-Origin标题
  4. 为什么这样做?

0 个答案:

没有答案