jquery ajax请求结果未定义

时间:2016-06-05 12:57:03

标签: javascript php jquery ajax

我的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);

2 个答案:

答案 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

回答问题