我发现从PHP发送JSON字符串到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是否对文本做了奇怪的事情?
答案 0 :(得分: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代码如何接收tejax请求的更多信息?我希望在那里看到$ _POST ......
答案 1 :(得分:0)
您从JavaScript传递的数据错误:
data: { 'cmd' : 'getinfo', 'tagid' : $('#tag').val },
您应该使用.val
作为函数,而不是属性:
data: { 'cmd' : 'getinfo', 'tagid' : $('#tag').val() },
答案 2 :(得分:0)
任何人都发生在这篇文章中我也遇到了这个问题......
在我的情况下,用于执行curl请求的变量未正确分配。因此,当我使用硬编码信息测试我的php curl时,它回应了正确的JSON响应。但是,当我通过JQuery Ajax调用运行它时,它返回null作为JSON数据。我抓了一会儿,试了一下,认为卷曲可能会从响应中附加一些不好的数据。但是,当我最终感到沮丧,以至于在请求发出之前检查我的密钥卷曲请求参数实际上是否被正确识别时,我看到了很少,但他们不是。
请务必检查以确保正确分配传入的GET / POST变量!