【问题标题】:jQuery.ajax seems to be bypassed completely - no console logjQuery.ajax 似乎被完全绕过了——没有控制台日志
【发布时间】:2014-09-30 14:31:48
【问题描述】:

我有一些 jQuery/HTML,我在其中接受单个用户输入(文本)并希望将其传递给 PHP,以存储以供以后在会话变量中使用。我查看了很多关于此类操作的页面,发现最接近我认为我需要的答案是 Set Session variable using javascript 。以下代码大致基于此,但似乎 ajax 什么也没做。我一直有console.logs,并且在通过ajax语句的每个可能路径(完成,失败和总是),但没有出现。控制台日志显示:

  1. (文档).ready

  2. 从输入中获取新列表名称

  3. 列表A1

  4. 通行证名称:ListA1

对象 {listNamePOST: "ListA1"}

  1. passName 函数结束

  2. 从 passName() 返回

  3. 即将回显 $_SESSION['listName']:

  4. 结束

错过了 6. 成功或 6. 失败和 7. 总是。和行 console.log();甚至不显示空行。

请问我哪里出错了?

这里是test.php

<?php    session_start();  ?>
<form method="post" name="newlistform">
    <label for="list_name">Input:</label>
    <input style="position: relative; " name="list_name" type="text" required />
    <span class="button"  id="makeIt">Go</span>
</form>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script>
/* ƒ: Pass listName out to SESSION variable */
    function passName ( listName ) {
console.log('4. passName: ', listName);
        var params = {listNamePOST: listName};
console.log("5. :");
console.log(params);
        jQuery.ajax({
            url: "storesession.php",
            type: "POST",
            data: params,
            dataType : "json",
            success: function(data, textStatus, xhr) {
console.log("6. success");
console.log(data); 
            },
            error: function(xhr, textStatus, errorThrown) {
console.log("6. fail");
            }
        });
console.log('8. passName function end');
    }

    $(document).ready(function () {
console.log('1. (document).ready');

    $( '#makeIt.button' ).click(function () {
console.log('2. Take new list name from input');
        var listName = $( 'input[name=list_name]' ).val();
console.log('3.', listName);
        passName ( listName );
console.log('9. returned from passName()');
console.log("10. about to echo $_SESSION['listName'] :");
console.log(<?php echo $_SESSION['listName'] ?>);
console.log('12. end');
    });
})
</script>

这里是 storesession.php

<?php 
$_SESSION['listName'] = $_POST['listNamePOST']; 
?>

(我稍后会清理用户输入。)

编辑:刚刚删除了每个控制台日志行末尾的“test.php”。我无意中复制了它们。

第二次编辑:供参考 - 此代码是一个更大的 php 文件的摘录,其中包括另一个 $.ajax 调用,用于从 MySQL 数据库中获取一些数据,这是有效的。

第三次修改:将“done:”改回“success:”,“fail:”改回“error:”并删除“always:”。这现在增加了 6. success 作为最后一行,所以@FrancescoMM 和@Kevin 把我说对了,虽然我不明白为什么当我最初有它时它不起作用。

作为'6。成功'出现在日志的末尾,我将尝试 async: false 并报告:- 好的,这解决了顺序问题,但是日志语句 10. 和 12. 之间的控制台日志语句仍然没有出现。没有“未定义”,甚至没有空行。

所以问题现在简化为将 listName 放入会话变量中。

第 4 次编辑:现已解决。当我将 session_start 语句从 test.php 移动到 storesession.php 并发现它不起作用时,我将其移回,但不是作为第一个语句。因为我找到了http://www.yourhowto.net/how-to-check-and-create-php-session-variables/,所以将语句移到了最开始,现在用户数据正在传递给会话变量,并在 10. 到 12 之间的日志末尾正确显示。

【问题讨论】:

  • 你试过success:function() {console.log("6. success");}, 吗? (而不是完成?)
  • @FrancescoMM - 谢谢。是的,我从成功开始:错误:然后发现它不起作用(并且将被弃用)所以切换了。我刚刚重试成功,确认结果是一样的。
  • success: fnerror: fn 不会折旧。 .success(fn).error(fn) 是。巨大差距。 done: fnfail: fn 什么都不做。
  • @Kevin,谢谢你让我明白这一点。也许我误解了这一点:api.jquery.com/jquery.ajax 但它说“弃用通知:jqXHR.success()、jqXHR.error() 和 jqXHR.complete() 回调自 jQuery 1.8 起已弃用。要为最终删除准备您的代码,请改用 jqXHR.done()、jqXHR.fail() 和 jqXHR.always()。'' 无论如何,正如我所说,我首先使用了成功:和错误:但它没有'不起作用,然后重试,它仍然不起作用。我的问题一定出在其他地方。
  • @FrancescoMM,Kevin,请看我的第三次编辑。

标签: php jquery ajax session


【解决方案1】:

如果它真的是您的完整 storesession.php,那么您在其中缺少 session_start()

【讨论】:

  • 谢谢@Marek。 test.php 的第一行是 (这里我在
【解决方案2】:

您是否从 AJAX 调用返回 json 格式的数据?我有一个类似的问题,这是因为数据类型,丢失 dataType : "json" 除非你真的返回 json,看看是否有帮助。

【讨论】:

  • 谢谢@Matt - 我从 dataType: "text" 开始,但没有用,所以我改用 json。根据您的建议,我只是删除了数据类型行,但结果是一样的。
  • 好的;打开开发者控制台并查看正在发出的 XHR 请求,查看发回的标头以及是否有响应。
猜你喜欢
  • 1970-01-01
  • 2014-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多