javascript - 为什么我不能通过 ajax 将回调数组从 PHP 传递到 jquery?

标签 javascript php jquery json ajax

我有一个大文件,但在调试问题时,我将其缩小,以消除所有外部内容。基本上我得到了这个 .php 文件:

<?php 
if (isset($_POST['val'])) {
        header("Content-type: application/json; charset=utf-8");
        echo json_encode(array("The first string", "first"));
    }
?>
 <script type="text/javascript" src="javascript/jquery.js"></script>
 <script type="text/javascript">
    $.ajax({
        type: 'POST',
        url: 'other',
        data: {val: 'text'},
        contentType: "application/json",
        dataType: 'json',
        success: function(result) {
            console.log(result);
            alert(result);
        },
        error: function(err) {
            console.log(err);
            alert('Error -> ' + err);
        }
    });
 </script>

在原始代码中,我在不同的文件中有 PHP 和 Javascript,所以请不要告诉我像这样将 PHP 继承到 javascript <?php ?> , 刚刚查了很多资料,里面很多人都是这样建议的。

在这个脚本中,触发了一个错误函数。当我研究这个问题时,我发现它是在传递无效的 json 时触发的。 这是我在警告框中得到的:Error -> [object Object] ,这是我在控制台中得到的:

uncaught exception: out of memory <unknown>
Object { readyState: 4, getResponseHeader: .ajax/v.getResponseHeader(), getAllResponseHeaders: .ajax/v.getAllResponseHeaders(), setRequestHeader: .ajax/v.setRequestHeader(), overrideMimeType: .ajax/v.overrideMimeType(), statusCode: .ajax/v.statusCode(), abort: .ajax/v.abort(), state: .Deferred/d.state(), always: .Deferred/d.always(), then: .Deferred/d.then(), 11 more… }

如果我将 dataType 更改为 html,并删除 contentType,我将执行成功函数。它通过了这个:

["The first string","first"]
<script type="text/javascript" src="javascript/jquery.js"></script>
<script type="text/javascript">
$.ajax({
        type: 'POST',

以及页面的其余代码。

我需要接收一个 json。为什么这东西不起作用?为什么我没有收到 json?

附言 您可能会注意到,我在 url 的末尾没有 .php ... 我有一个 .htaccess 文件,删除它,所以这不是问题。我正在禁用它并使用带有 .php 的脚本,但没有任何变化。 PHP 代码已执行,但我没有得到正确的回调...

最佳答案

尝试在回显 json 后添加一个退出,这样您就不会将下面的 html 也返回给您的 ajax 调用。

<?
if (isset($_POST['val'])) {
        header("Content-type: application/json; charset=utf-8");
        echo json_encode(array("The first string", "first"));
        exit; // add exit here so html below is not also returned
    }
?>

关于javascript - 为什么我不能通过 ajax 将回调数组从 PHP 传递到 jquery?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33746081/

相关文章:

php - 防止传递状态通知错误或电子邮件回复

javascript - setTimeout 在 "change"事件处理程序中,但仅适用于不同的调用者

javascript - 当所有图像加载完毕后,执行一段代码

javascript - 原始图像的宽度

javascript - jQuery悬停表格设计动画

php - DayofYear + Curdate 不起作用

jquery - 使用 Greasemonkey 获取 iframe 中类的内容

javascript - 循环 html 表并选中复选框(JQuery)

javascript - 如何创建 JSON 列表?

php - 在 PHP 中仅加载特定函数的最佳方法