0

我正在尝试从具有跨域支持的 php 服务器访问数据。因此,当我使用 dataType 尝试 $.ajax 时:'jsonp' 我在控制台中出现错误:Uncaught SyntaxError: Unexpected token 该文件被解释为 javascript 文件,请求失败。您是否有在没有此错误的情况下获取数据的想法。

$.ajax({
    url : 'http://domaine.com/json.php',
    contentType: "application/json; charset=utf-8",
    dataType : 'jsonp',
    success : function(data){
        console.log(data);
        // no enter in this callback
    },
    complete: function(data1, data2, data3){
        // no data from file.js
    }
});
4

2 回答 2

4

首先确保您的 PHP 脚本支持 JSONP。确定需要传递的查询字符串参数,以便脚本返回 JSONP。然后在浏览器中直接在地址栏中输入以下地址进行测试:

http://domain.com/json.php?callback=abc

您应该会看到以下内容:

abc({ ... some JSON here ... })

callback如果您的 PHP 脚本需要不同的名称,您可能需要调整名称参数。如果您看到以下输出({ ... some JSON here ... }未包含在您的 javascript 函数中),则可能是这种情况

一旦你确定你有一个返回 JSONP 的有效 PHP 脚本,你就可以使用它:

$.ajax({
    url : 'http://domain.com/json.php',
    jsonp: 'callback',
    dataType : 'jsonp',
    success : function(data){
        console.log(data);
        // no enter in this callback
    },
    complete: function(data1, data2, data3){
        // no data from file.js
    }
});

注意事项:

  1. 我已经使用jsonp: 'callback'参数指定了回调
  2. 我已经摆脱了该contentType: 'application/json'参数,因为 jQuery 的 JSONP 实现使用script不允许您设置任何请求标头的标签。
于 2013-02-24T17:49:49.737 回答
1

您需要添加?callback=?到请求中,以便评估正确的回调。但是,它可能不会被称为callback。您需要从域中找出它的名称。

如果域(和浏览器)支持CORS,你甚至不需要使用 JSONP。您可以使用普通请求。

于 2013-02-24T17:49:41.887 回答