【问题标题】:how to convert ajax json call to jsonp如何将ajax json调用转换为jsonp
【发布时间】:2013-08-19 23:45:49
【问题描述】:

我有一个这样的 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 才能使此脚本正常工作?

【问题讨论】:

  • 我试过了,没有任何反应
  • 您必须更改服务器实际输出的内容,因为 JSONP 必须包装在回调函数中,否则我将无法工作。换句话说,仅仅改变 dataType 没有任何作用。
  • 我在 php 中创建 json 对象并回显它。你能给我举个例子吗?
  • 那个 json 对象必须被包装在一个函数中,因为 JSONP 不是真正的 ajax,它在文档中插入一个脚本标签,并且需要包装回调函数来知道文件何时有已加载。

标签: php jquery ajax json jsonp


【解决方案1】:

您需要通过 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

【讨论】:

  • 所以ajax调用保持不变,只需要在url中添加变量并更改post即可获取?
  • @user123_456 - 如果它是跨域的,因为在您尝试连接的页面中有另一个域,那么这个答案甚至不会关闭。
  • 还将类型更改为“GET”。做跨域,接收数据必须是json编码。您是否可以控制其他网站?
  • 如果将dataType更改为JSONP,则无论您在type属性中键入什么,方法都将始终为GET。
  • @adeneo 这是部署为智能手机应用程序的 jquery 移动应用程序,所以是的,我认为这是跨域的。你能举个例子吗?
【解决方案2】:

当然可以。 JSON 和 JSONP 的唯一区别是 JSONP 是用函数名包装的;

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

【讨论】:

  • 如何更改 PHP 和 JS 以按照您所说的这种形式检索数据。这是我用于创建 json 对象的 PHP:echo json_encode( array( "results" => array( array( "user" => $member['user'], "company" => $member['company'] ) ) ));
  • 你能给我一个解决方案吗?因为我无法让它工作
【解决方案3】:

试试这个...

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

    }
});

【讨论】:

  • 我在控制台中收到此错误:Uncaught SyntaxError: Unexpected token :
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
  • 2017-05-08
  • 2012-12-25
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
  • 2015-08-29
相关资源
最近更新 更多