【问题标题】:jquery/PHP: getting NULL return from curl stringjquery/PHP:从 curl 字符串获取 NULL 返回
【发布时间】:2013-01-30 21:56:38
【问题描述】:

我看到从 PHP 向 Jquery 的 $.ajax 函数发送回 JSON 字符串时的一些特殊行为。

当我从浏览器访问我的 php 脚本或通过命令行使用 php 调用它时,它返回完全有效的 JSON(使用 jsonlint.com 测试)。但是,当我从我的 HTML 文件进行 AJAX 调用时,我总是返回 NULL。

我基本上是从 PHP 做这个的:

// case in a switch that handles command 'getinfo':
$url = "http://someapi.com:1234/api/entity/" . $tagid;
$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_HEADER, 0 );
curl_setopt( $ch, CURLOPT_USERPWD, "user:pass" );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );

$reply = curl_exec( $ch );

header('Content-Type: application/json');
echo $reply;

这会吐出这个:

[ {
  "class" : "entity",
  "guid" : "IT_EQUIPMENT_abcdef12345677890",
  "retired" : false,
  "deletable" : true,
  "$aAssetTamper" : false
} ]

我尝试了设置和不设置 RETURNTRANSFER 以及设置和不设置 header() 行。在 HTML 方面,我使用 Ajax 调用:

$.ajax({
    url: "gimmedata.php",
    dataType: "json",
    cache: false,
    async: false,
    data: { 'cmd' : 'getinfo', 'tagid' : $('#tag').val },
    success: function( data, textStatus ) {
        // rfcode location
        console.log(data);
    }
});

状态总是返回“成功”,数据总是“[]”。

奇怪的是,如果我从 PHP 脚本复制输出,然后将其粘贴回脚本本身,然后在不经过 curl 的情况下回显该字符串,那么我的 AJAX 调用工作正常:

echo '
[ {
  "class" : "entity" 
  "guid" : "IT_EQUIPMENT_abcdef12345677890",
  "retired" : false,
  "deletable" : true,
  "$aAssetTamper" : false
} ]';
return;

$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_HEADER, 0 );
curl_setopt( $ch, CURLOPT_USERPWD, "user:pass" );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );

$reply = curl_exec( $ch );

header('Content-Type: application/json');
echo $reply;

我不知道它会是什么。有什么线索吗? curl_exec 是否对文本做奇怪的事情?

【问题讨论】:

  • 您确定它返回的是有效的 JSON,您是否尝试过 json_encode 来查看是否有任何改变?

标签: php jquery ajax curl


【解决方案1】:

php 有一个漂亮的函数:json_encode。也许您可以看看将其集成到您的代码中是否有助于确保您的 json 的有效性? http://php.net/manual/en/function.json-encode.php

其次,您的请求是同步的,除非您必须这样做,否则这通常不是最好的使用方法,关于该主题的内容很多

也尝试调整您的 ajax 代码:

$.ajax({
    url: "gimmedata.php",
    async: false,
    data: { 'cmd' : 'getinfo', 'tagid' : $('#tag').val() },
    success: function( data, textStatus ) {
        // rfcode location
        console.log(data);
    }
});

另外,您能否发布一些有关您的 PHP 代码如何接收 te ajax 请求的更多信息?我希望在某处看到 $_POST...

【讨论】:

    【解决方案2】:

    您从 JavaScript 传递的数据是错误的:

    data: { 'cmd' : 'getinfo', 'tagid' : $('#tag').val },
    

    您应该将.val 用作函数,而不是属性:

    data: { 'cmd' : 'getinfo', 'tagid' : $('#tag').val() },
    

    【讨论】:

      【解决方案3】:

      如果有人看到这篇文章,我也遇到了这个问题......

      在我的情况下,我用来执行 curl 请求的变量没有被正确分配。因此,当我使用硬编码信息测试我的 php curl 时,它正在回显正确的 JSON 响应。但是当我通过 JQuery Ajax 调用运行它时,它返回 null 作为 JSON 数据。我挠了挠头,尝试了一堆东西,认为 curl 可能会从响应中附加一些不良数据。但是,当我终于沮丧到检查我的关键 curl 请求参数是否在发出请求之前实际上被正确识别时,低头看吧......好吧,他们没有。

      始终检查以确保正确分配传入的 GET / POST 变量!

      【讨论】:

        猜你喜欢
        • 2013-10-25
        • 1970-01-01
        • 2014-03-27
        • 1970-01-01
        • 2015-12-21
        • 1970-01-01
        • 1970-01-01
        • 2012-10-16
        • 1970-01-01
        相关资源
        最近更新 更多