如何将ajax json调用转换为jsonp

时间:2013-08-17 19:16:31

标签: php jquery ajax json jsonp

我有这样的ajax调用:

$.ajax({
    type: "POST",
    url: "www.something.com/login.php",
    cache:false,
    dataType: "json",
    data: { 
        username: $('#user').val(),
        password: $('#pass').val()
           },
        success: function(response) 
        {
           localStorage.setItem('user',response.results[0].user);
           localStorage.setItem('company',response.results[0].company);

        }
});

这不起作用,因为我正在尝试连接到与我的文件不在同一根目录的脚本,此PHP文件位于外部服务器上。

如何使用JSONP来使此脚本正常运行?

3 个答案:

答案 0 :(得分:1)

当然可以。 JSON和JSONP之间的唯一区别是JSONP包含一个函数名称;

{ "x": "hello" } // JSON
foo({ "x": "hello" }); // JSONP.

答案 1 :(得分:0)

您需要通过网址变量传递信息。

type: "GET",
url: "www.something.com/login.php?login="+username+"&password="+password,

然后在服务器端:

$_GET["username"];
$_GET["password"];

但是现在我已经告诉过你了,请不要这样做以获得密码和登录!这是非常不安全的!

相反,创建一个本地PHP文件,与后端的其他网站共享数据。如果您不能这样做,请使用iframes并使用原始方法。

另一种方法是使用cURL。 cURL允许您像在浏览器页面上一样登录。它不是很快,但它在你没有太多控制权并且没有API的网站上运行良好。

Using PHP CURL to login to a remote web site

答案 2 :(得分:0)

试试这个......

$.ajax({
type: "POST",
url: "www.something.com/login.php",
cache:false,
dataType: "jsonp",
crossDomain: true,
data: { 
    username: $('#user').val(),
    password: $('#pass').val()
       },
    success: function(response) 
    {
       localStorage.setItem('user',response.results[0].user);
       localStorage.setItem('company',response.results[0].company);

    }
});