javascript - 让 JSONP 正常工作

标签 javascript jquery ajax

我正在尝试从具有跨域支持的 php 服务器访问数据。因此,当我尝试使用 dataType : 'jsonp' 的 $.ajax 时,控制台中出现错误: 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
    }
});

最佳答案

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

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

您应该看到类似以下内容:

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

如果您的 PHP 脚本需要不同的名称参数,您可能需要调整 callback 名称参数。如果您看到以下输出({ ... 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 标签,它不允许您设置任何请求 header .

关于javascript - 让 JSONP 正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15054582/

相关文章:

javascript - 将成功添加到双 jquery/ajax post

javascript - 抓取 ajax 加载内容中的值会导致白页

javascript - 使用 p5js 创建多个可点击的 Div

c# - 如何使用 JavaScript 在 MVC3 中的 View 之间保留数据?

javascript - AngularJS $http 返回未定义?

javascript - 通过树遍历选择元素的多重选择器

javascript - jquery 中每个单词的字符应大写

php - jQuery 和 PHP 的聊天功能不写入数据库

asp.net - 如何知道所有 AJAX 调用何时结束

javascript - 循环遍历表并在 URL 中发送 <td> 值