Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 让JSONPto工作_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 让JSONPto工作

Javascript 让JSONPto工作,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在尝试使用跨域支持从php服务器访问数据。因此,当我尝试使用数据类型为“jsonp”的$.ajax时,控制台中出现一个错误:Uncaught SyntaxError:Unexpected token文件被解释为javascript文件,请求失败。你有没有办法在没有这个错误的情况下获取数据 $.ajax({ url : 'http://domaine.com/json.php', contentType: "application/json; charset=utf-8",

我正在尝试使用跨域支持从php服务器访问数据。因此,当我尝试使用数据类型为“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
    }
});

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


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

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


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

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

http://domain.com/json.php?callback=abc
您应该看到以下内容:

abc({ ... some JSON here ... })
如果PHP脚本需要另一个参数,则可能需要调整
callback
name参数。如果您看到以下输出(
{…这里有一些JSON…}
而没有包装在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
    }
});
注意事项:

  • 我已经使用
    jsonp:'callback'
    参数指定了回调
  • 我已经去掉了
    contentType:'application/json'
    参数,因为jQuery对JSONP的实现使用了
    script
    标记,它不允许您设置任何请求头

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

    http://domain.com/json.php?callback=abc
    
    您应该看到以下内容:

    abc({ ... some JSON here ... })
    
    如果PHP脚本需要另一个参数,则可能需要调整
    callback
    name参数。如果您看到以下输出(
    {…这里有一些JSON…}
    而没有包装在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
        }
    });
    
    注意事项:

  • 我已经使用
    jsonp:'callback'
    参数指定了回调
  • 我已经去掉了
    contentType:'application/json'
    参数,因为jQuery对JSONP的实现使用了
    script
    标记,它不允许您设置任何请求头

  • 如果域支持CORS,jQuery应该为JSONP请求自动添加
    callback=?
    。如果浏览器支持CORS,我会添加和
    ,因为只有域支持它是不够的。如果域支持CORS,jQuery应该为JSONP请求自动添加
    回调=?
    。如果浏览器支持CORS,我会添加和
    ,因为只有域支持它是不够的。