我的PHP返回了一个字符串。我从$ .ajax调用PHP脚本并尝试将字符串放在全局变量中以进行进一步操作。它说变量是未定义的。你能帮帮我吗?
(我使用dataType : "jsonp"
来避免此处回答的错误Ajax Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource)
我的javascript(Jquery,Ajax,...)脚本
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);
?>
HTML代码
<!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);
答案 0 :(得分:2)
您没有获得有效的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);
}
});
}
确认HERE.
<?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]
测试HERE
答案 1 :(得分:1)
问题是你的全局变量 my_data 和你成功函数的参数变量不是同一个变量。您可以更改参数名称,然后将其值分配给全局变量。
success: function (result){ my_data = result; }
检查this小提琴以澄清这一点。
<强>更新强> 您也可以通过@Poiz
回答问题