.ajax()发布回调文件无法识别php定义常量

时间:2013-01-09 20:16:06

标签: php json jquery

使用下面的代码时,我无法设置正确的位置。不知何故,在回调文件中,php常量未被识别,因此其余代码无法正常运行。

来自html的

片段:

<a href="#" class="selectLocation" id="ABC">
来自.js的

片段

var locationID;

    $(".selectLocation").click(function(){
    locationID = this.id;
    setLocation();
    });

function setLocation() {
    $.ajax({
        data: {location: locationID},
        success: function (data) {
        // do something
        };
    });
  };

// DEFAULT AJAX SETUP
$(function () {
    $.ajaxSetup({
        type: "POST",
        url: "dir/callback.php",
        dataType: "json",
        cache: "false",
        error: function (jqXHR, exception) {
            if (jqXHR.status === 0) {
                console.log('No connecting.\n Verify Network.');
            } else if (jqXHR.status == 400) {
                console.log('Bad Request. [400]');
            } else if (jqXHR.status == 404) {
                console.log('Requested page not found. [404]');
            } else if (jqXHR.status == 500) {
                console.log('Internal Server Error [500].');
            } else if (exception === 'parsererror') {
                console.log(jqXHR.responseText);
                console.log('Requested JSON parse failed.');
            } else if (exception === 'timeout') {
                console.log('Time out error.');
            } else if (exception === 'abort') {
                console.log('Ajax request aborted.');
            } else {
                console.log('Uncaught Error: ' + jqXHR.responseText);
            };
        }
    });
来自callback.php的

片段:

    <?php
    header("content-type:application/json");
    session_start();
    require_once ('config.php');
...

    $connect->setLocation($_POST['location']);

$ _POST ['location'];将ABC发送到我的其余代码而不是下面定义的正确值。

来自config.php的

片段:

define('ABC', 'some location');

如果我这样做:

echo (ABC);

在回调文件中,我获取正确的位置值。

2 个答案:

答案 0 :(得分:1)

$_POST['location']变量中,有一个字符串'ABC'。

因此,如果您执行echo($_POST['location']);,则会获得ABC,而非some location

试试这个:

$connect->setLocation(constant($_POST['location']));

答案 1 :(得分:0)

如果您打算将a - 元素的id属性设置为ABC - 常量,则必须这样做:

<a href="#" class="selectLocation" id="<?php echo ABC; ?>">

PHP常量仅在PHP代码中解析,而不是在HTML中解析。

除此之外,在DOM元素的ID中编码数据对我来说似乎有点费解。如果我必须在HTML元素中编码内容,我更喜欢使用隐藏的span - 标记或hidden元素,如果我在form内。您还可以尝试将以下内容添加到生成HTML文件的PHP脚本中:

<script type="text/javascript">
    locationID = <?php echo ABC; ?>;
</script>

假设locationID在全球范围内。或者,您可以在JS文件中提供某种init() - 函数,并通过类似于上面的代码段调用它。