jquery/PHP:从curl字符串获取NULL返回
我看到从PHP向Jquery的$.ajax函数发送JSON字符串时出现了一些奇怪的行为 当我从浏览器访问我的php脚本,或者使用php通过命令行调用它时,它返回完全有效的JSON(用jsonlint.com测试)。然而,当我从HTML文件中调用AJAX时,我总是返回NULL 基本上,我是从PHP开始这样做的: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
// 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_编码以查看这是否会改变什么?