2013-04-13 64 views
0

時嘗試生成一個動態JSONP回聲,但JS AJAX調用後我得到了我的檢查工具的錯誤:生成有效JSONP與多維的PHP陣列

Uncaught ReferenceError: jQuery191019304498913697898_1365868235193 is not defined index.php:1

PHP:

<?php 

header('Content-type: application/javascript; charset=utf-8'); 

$array = array(); 
array_push($array, array('name' => 'A', 'host' => 'A.com')); 
array_push($array, array('name' => 'B', 'host' => 'B.com')); 

//$jsonp = json_encode($array, JSON_FORCE_OBJECT); 
$jsonp = json_encode($array); 


if(isset($_GET['callback'])) 
{ 
    echo $_GET['callback'].'('.$jsonp.')'; 
} 
else 
{ 
    echo $json; 
} 

?> 

JS:

$.ajax({ 
    username: username, 
    password: password, 
    url: url, 
    dataType: 'jsonp', 
    crossDomain: true, 
    ifModified: true, 
    success: function (data, status, jqXHR) { 
     console.log(data); 
     $.each(data, function(index, value) { 
      console.log(value['name']); 
     }); 
    } 
}); 

AJAX調用響應:

jQuery191019304498913697898_1365868235193([{"name":"A","host":"A.com"},{"name":"B","host":"B.com"}]) 

你有什麼想法嗎? 我的錯誤在哪裏?

感謝

+0

不知道這是否會成爲一個問題,但你錯過了你的分號:echo'$ _GET ['callback']。'('。$ jsonp。');'; – 2013-04-13 16:12:53

+0

另外,您正在打印回覆(然後到JS)回調GET參數。這就是爲什麼JavaScript抱怨「未捕獲的ReferenceError」。除非在javascript中有效的變量,否則不要打印該值。 – ricardohdz

+0

@navnav:我添加了缺少的分號,但同樣的錯誤:/ – Arsch5000

回答

0

改變這種

header('Content-type: application/javascript; charset=utf-8'); 

header('Content-type: application/json; charset=utf-8'); 
+0

對不起,但同樣的錯誤... – Arsch5000

4

試試這個。

//test.php文件

<?php 
header('Content-type: application/json; charset=utf-8'); 

$array = array(); 
array_push($array, array('name' => 'A', 'host' => 'A.com')); 
array_push($array, array('name' => 'B', 'host' => 'B.com')); 

$jsonp = json_encode($array); 

if(isset($_GET['callback'])){ 
    echo $_GET['callback'] . '(' . $jsonp . ')'; 
}else{ 
    echo $jsonp; 
} 
?> 

// js文件

<script type="text/javascript"> 

    function myCallback(data, status){ 
     console.log(data); 
    } 

    $.ajax({ 
     url: 'test.php', 
     dataType: 'jsonp', 
     jsonp: 'callback', 
     jsonpCallback: 'myCallback', 
     crossDomain: true, 
     ifModified: true 
    }); 
</script> 

記住,jQuery的自動生成回調別名,如果你不指定它。您的回撥實際上被設置爲"jQuery191019304498913697898_1365868235193()"。通過手動設置你的回調它應該工作。

+0

JS錯誤:未捕獲ReferenceError:myCallback未定義 – Arsch5000

+0

您是否完全複製並粘貼了所有代碼? myCallback()需要被定義在你發出ajax請求的地方。 – 1337holiday