【问题标题】:Retrieving JSONP in PHP not working在 PHP 中检索 JSONP 不起作用
【发布时间】:2015-10-21 03:10:21
【问题描述】:

我正在为这个问题而烦恼: 我正在使用 JSONP 从一个域向另一个域发送一些数据,它在我的本地主机上工作得非常好,但在服务器上却不能工作。我在后端使用 CodeIgniter 2.X。 这是一些代码:

 var telefono = $('#telefono').val();
        var email = $('#email').val();
        var mensaje = $('#mensaje').val();
        $.ajax({
            url: 'http://www.example.com/site/admin/index.php/controller/save',
            type: 'POST',
            dataType: 'jsonp',
            data: JSON.stringify({nombre:nombre,telefono:telefono,email:email,mensaje:mensaje,idPropiedad:46}),
            cache: false,
            processData: false,
            crossDomain: true
        })

在 CodeIgniter 上:

$info = json_decode(file_get_contents("php://input"));
var_dump($info);

这就是我检索数据的方式,它在我的本地主机上就像一个魅力。然而我在这台服务器上得到了 NULL。我也尝试转储 $_POST 数组,那里什么都没有。

这就是我转储 $_GET 数组的结果:

 array(3) {
  ["callback"]=>
  string(42) "jQuery1111037374000856652856_1438207931357"
  ["{\"nombre\":\"fasf\",\"telefono\":\"asfasfasfas\",\"email\":\"asfasfas\",\"mensaje\":\"fasfasfa\",\"idPropiedad\":46}"]=>
  string(0) ""
  ["_"]=>
  string(13) "1438207931360"
}

我也尝试从前端使用 FormData() 发送数据,没有。

这是正在发送的内容:

Request URL:http://www.example.cl/site/admin/index.php/controller/save?callback=jQuery1111037374000856652856_1438207931357&{%22nombre%22:%22fasf%22,%22telefono%22:%22asfasfasfas%22,%22email%22:%22asfasfas%22,%22mensaje%22:%22fasfasfa%22,%22idPropiedad%22:46}&_=1438207931359
Request Method:GET
Status Code:200 OK

有什么想法吗?提前致谢。

【问题讨论】:

  • 两个位置的 jQuery 版本相同?
  • 您确定$info = json_decode(file_get_contents("php://input")); 中的路径正确吗?我不知道任何php://input...
  • php://input 应该可以工作 - 我经常使用它。尝试改用dataType: 'json',看看是否有任何改变。 $.ajax 'jsonp' 的 api 说:“使用 JSONP 加载到 JSON 块中。在 URL 的末尾添加一个额外的“?callback =?”以指定回调。通过附加查询字符串参数禁用缓存,“_ =[TIMESTAMP]",除非缓存选项设置为 true。"
  • 无法使用jsonp 进行POST ....这就是为什么您的标题显示GET。如果您控制两个域,则可以在另一个域上启用 CORS 或使用您的服务器使用 cURL 进行发布
  • @psalmody 我必须使用 jsonp,因为 jquery 脚本和接收器位于不同的域中。如果我使用 GET 作为类型,这就是我转储$_GET/**/_xdc_._q58197 && _xdc_._q58197( [0,null,1] )

标签: php jquery ajax codeigniter jsonp


【解决方案1】:

使用POSTjsonp 是矛盾的。如您所见,正在使用GET。您的其余数据不可用(嗯,至少难以访问),因为您对其进行了字符串化。如果您只是传递未字符串化的对象,jQuery 会将您的对象转换为 URL 中的键/值对。

var telefono = $('#telefono').val();
var email = $('#email').val();
var mensaje = $('#mensaje').val();
$.ajax({
    url: 'http://www.example.com/site/admin/index.php/controller/save',
    dataType: 'jsonp',
    data: {
       nombre: nombre,
       telefono: telefono,
       email: email,
       mensaje: mensaje,
       idPropiedad: 46
    }
});

然后,您可以通过以下方式访问数据:

$nombre = $_GET['nombre'];
$telefono = $_GET['telefono'];
... etc

【讨论】:

  • 是的,这是合乎逻辑的方法。不幸的是,我的代码或我的服务器正在发生一些非常奇怪的事情。这就是我必须使用CORS 的原因。感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 2013-04-27
  • 2016-03-05
  • 2015-06-09
  • 1970-01-01
  • 2013-08-02
  • 2012-10-09
  • 2015-04-12
  • 1970-01-01
相关资源
最近更新 更多