Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jquery/PHP:从curl字符串获取NULL返回_Php_Jquery_Ajax_Curl - Fatal编程技术网

jquery/PHP:从curl字符串获取NULL返回

jquery/PHP:从curl字符串获取NULL返回,php,jquery,ajax,curl,Php,Jquery,Ajax,Curl,我看到从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

我看到从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\u exec对文本做了奇怪的事情吗?

php有一个漂亮的函数:json\u encode。也许您可以看到,将其集成到代码中是否有助于确保json的有效性

其次,您的请求是同步的,这通常不是最好的使用方法,除非您必须这样做,在这个主题上有很多内容

还可以尝试调整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请求的更多信息吗?我希望在那里的某个地方看到$\u POST…

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

data: { 'cmd' : 'getinfo', 'tagid' : $('#tag').val },
应将
.val
用作函数,而不是属性:

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

万一有人看到这篇文章,我也会遇到这个问题

在我的例子中,用于执行curl请求的变量没有被正确分配。因此,当我使用硬编码信息测试我的php curl时,它响应了正确的JSON响应。但是当我通过jqueryajax调用运行它时,它返回了null作为JSON数据。我搔了一会儿头,尝试了一些事情,认为curl可能在响应中附加了一些不好的数据。但是,当我最终沮丧到检查我的关键curl请求参数是否在请求发出之前被正确识别时,我就开始低头了。。他们不是


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

您确定它返回的是有效的JSON吗?您是否尝试过JSON_编码以查看这是否会改变什么?