2013-02-14 73 views
1

我看到一些特殊的行爲,從PHP發回JSON字符串到JQuery的$ .ajax函數。jquery/PHP:獲得NULL從捲曲字符串返回

當我訪問我的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組有和沒有頭都嘗試,也()線。在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腳本複製輸出,然後將其粘貼到腳本本身,然後回顯該字符串不經過捲曲去,然後我的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

你確定它是否返回有效的JSON,並且你是否嘗試使用json_encode來查看是否改變了任何內容? – adeneo 2013-02-14 23:35:49

回答

0

你的數據從JavaScript傳遞錯誤的是:

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

你應該使用.val作爲一個函數,而不是作爲一個屬性:

data: { 'cmd' : 'getinfo', 'tagid' : $('#tag').val() }, 
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在那裏的某個地方......

+0

所以,即使更怪了.... – AaplMike 2013-02-14 23:49:22

0

Incase任何人發生在這篇文章我也遇到過這個問題...

在我的情況下,我用來做捲曲請求的變量沒有被正確分配。所以當我用硬編碼信息測試我的php curl時,它迴應了正確的JSON響應。但是當我通過JQuery Ajax調用運行它時,它將以JSON數據的形式返回null。我搔了搔腦袋,試了一堆東西,認爲curl可能會附加一些來自響應的不良數據。但低,看到當我最終感到沮喪,以檢查我的關鍵捲曲請求參數實際上被正確識別請求之前......好吧,他們沒有。

經常檢查,以確保您輸入的GET/POST變量正確分配!