2013-08-17 68 views
-1

我有一个Ajax调用这样的转换:如何AJAX JSON调用JSONP

$.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来获得此脚本的工作?

+0

我已经试过了,并没有发生任何事情 –

+0

你得改一下服务器实际上输出,为JSONP必须被包裹在一个回调函数,否则我不会工作。换句话说,只是改变dataType什么都不做。 – adeneo

+0

我在php中创建json对象并回显它。你可以给我看一个例子吗? –

回答

1

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

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

如何说明如何更改PHP和JS以检索此窗体中的数据。这是我的PHP用于创建JSON对象:'回波json_encode(阵列( \t \t \t \t \t \t \t \t \t “结果”=>数组( \t \t \t \t \t \t \t \t \t \t阵列( \t \t \t \t \t \t \t \t \t \t \t “用户”=> $构件[ '用户'], \t \t \t \t \t \t \t \t \t \t \t “公司”=> $构件[ '公司'] \t \t \t \t \t \t \t \t \t \t ) \t \t \t \t \t \t \t \t \t) \t \t \t \t \t \t \t \t));' –

+0

可以请您为我提供的解决方案?因为我不能得到这个工作 –

0

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

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

+0

所以ajax调用保持不变,只需要在url中添加变量并更改帖子即可获取? –

+0

@ user123_456 - 如果它是跨域的,就像您尝试连接到的页面有另一个域一样,这个答案甚至不是很接近。 – adeneo

+0

也可将类型更改为“GET”。要进行跨域,接收数据必须是json编码。你有其他网站的控制权吗? –

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); 

    } 
}); 
+0

我在控制台中得到这个错误:'未捕获的SyntaxError:意外的标记:' – Si8