2013-02-24 47 views
0

我试图从一个跨域支持的PHP服务器访问数据。所以,当我尝试与数据类型的$ .ajax:'jsonp'我在控制台中有一个错误:未捕获的SyntaxError:意外的令牌该文件被解释为一个JavaScript文件的请求失败。你有没有这个错误获取数据的想法。获取JSONPto工作

$.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

首先确保您的PHP脚本支持JSONP。确定需要传递的查询字符串参数,以便该脚本返回JSONP。

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

您应该看到沿东西线:

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

您可能需要调整callback名称参数如果然后通过在地址栏中直接输入如下地址测试它在浏览器你的PHP脚本需要一个不同的脚本。这可能是这种情况,如果你看到下面的输出({ ... some JSON here ... }没有被包裹在你的javascript函数)

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

$.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'参数b指定的回调因为jQuery的JSONP实现使用script标签,它不允许你设置任何请求头。
1

你需要做到正确的回调进行评估,以增加?callback=?请求。不过,它可能不会被称为callback。您需要了解从域中调用的内容。

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

+0

jQuery应该为JSONP请求自动添加'callback =?' – Quentin 2013-02-24 17:50:06

+0

'如果域支持CORS'。我会添加'如果浏览器支持CORS',因为它不足以让域支持它。 – 2013-02-24 17:52:33

+0

@DarinDimitrov谢谢,补充说 – 2013-02-24 17:58:24