1

我看到一些奇怪的行为,将 JSON 字符串从 PHP 发送回 Jquery 的 $.ajax 函数。

当我从浏览器访问我的 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 是否对文本做奇怪的事情?

4

3 回答 3

0

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 ......

于 2013-02-14T23:41:27.030 回答
0

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

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

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

data: { 'cmd' : 'getinfo', 'tagid' : $('#tag').val() },
于 2013-02-14T23:49:07.907 回答
0

万一有人发生在这篇文章上,我也遇到了这个问题......

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

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

于 2014-03-05T18:34:09.930 回答