我的PHP返回了一个字符串。我从 $.ajax 调用 PHP 脚本,并尝试将字符串放入全局变量中以进行进一步操作。它说变量是未定义的。你能帮我吗?
(我使用dataType : "jsonp"
来避免此处回答的错误 Ajax 跨源请求被阻止:同源策略不允许读取远程资源)
My JavaScript (Jquery, Ajax, ...) script
var my_data;
function get_my_data(){
$.ajax({
type: 'GET',
url: 'http://localhost:8012/My_PHP_scripts/test_1.php',
dataType : "jsonp",
crossDomain:true,
success: function (my_data){
console.log(my_data);
}
});
}
$( document ).ready(get_my_data);
PHP脚本
<?php
$user = 'JOHN';
echo json_encode($user);
?>
网页代码
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
<script type="text/javascript" src="MyJS.js"></script>
</head>
<body>
</body>
</html>
更新
PHP 脚本
<?php
$name = 'JOHN';
$encoded2 = json_encode(array('name'=>$name));
echo $encoded2;
die( $encoded2 );
?>
JS脚本
var my_data;
function get_my_data(){
$.ajax({
type: 'GET',
url: 'http://localhost:8012/My_PHP_scripts/test_1.php',
dataType : "jsonp",
crossDomain:true,
success: function (result){
my_data = result;
console.log(my_data.name);
console.log(result.name);
}
});
alert(my_data.name);
}
$( document ).ready(get_my_data);
您没有获得有效的 JSON,因为您的 PHP 代码只编码了一个纯字符串......你为什么不在PHP脚本中尝试这样的东西呢?
你的JS可以像这样更好:
function get_my_data(evt) {
$.ajax({
type: 'POST',
url: 'https://some-domain.ch/test.php',
dataType: "json",
crossDomain: true,
success: function(my_data) {
alert(my_data.name);
}
});
}
确认这一点 这里.
<?php
header('Access-Control-Allow-Origin: *'); //<== ALLOW ACCESS TO ALL...
header('Content-Type: application/json'); //<== TELL HEADER TO DELIVER JSON-TYPE DATA
$user = array('name'=>'JOHN');
die( json_encode($user) );
现在,您将拥有一个有效的 JSON 数据,您可以像这样访问它:
my_data.name; // WILL OUTPUT: JOHN
笔记:
<?php
$name = 'JOHN';
$encoded1 = json_encode($name);
die( $encoded1 ); //<== RESULT: 'JOHN' |==>[INVALID JSON - STRING]
$name = 'JOHN';
$encoded2 = json_encode( array('name'=>$name) );
die( $encoded2 ); //<== RESULT: {"name":"JOHN"} |==>[VALID JSON]
在这里进行测试
问题是你的全局变量my_data和成功函数的参数变量不是同一个变量。您可以更改参数名称,然后将其值分配给全局变量。
success: function (result){ my_data = result; }
检查这个小提琴以澄清这一点。
更新:您也有@Poiz回答的问题