Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AJAX PHP,在按钮上单击将变量从javascript提示符传递到PHP脚本以设置cookie?_Javascript_Php_Jquery_Ajax - Fatal编程技术网

AJAX PHP,在按钮上单击将变量从javascript提示符传递到PHP脚本以设置cookie?

AJAX PHP,在按钮上单击将变量从javascript提示符传递到PHP脚本以设置cookie?,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我是新手。我最近正在试验ajax和php,只是为了学习,我有一个简单的html: <button type="button" id="setc">Set Cookie</button> 下面是我的php脚本: <?php $cookieVar=""; $cookieVal=""; echo setcookie($cookieVar,$cookieVal); ?> 但是当我点击按钮时,它给了我这个错误: “警告:第4行的D:\xa

我是新手。我最近正在试验ajax和php,只是为了学习,我有一个简单的html:

<button type="button" id="setc">Set Cookie</button>
下面是我的php脚本:

<?php
    $cookieVar="";
    $cookieVal="";
    echo setcookie($cookieVar,$cookieVal);
?>

但是当我点击按钮时,它给了我这个错误:

“警告:第4行的D:\xampp\htdocs\phpcustomsite\setcookie.php中的Cookie名称不能为空”


如何使其工作?

使用PHP,我可以想到四个问题:

  • PHP脚本尝试使用
    $cookieVar
    $cookieVal
    而不声明它们。PHP不知道这些是什么

  • setcookie
    尝试设置http头<代码>回显尝试将内容输出到浏览器。输出内容后不能设置标题(除非您有允许此操作的缓冲区设置)。在这种情况下,这可能不是问题(因为内部函数首先运行),但为了安全起见,我会先设置cookie,然后在单独的一行上回显

  • setcookie
    不会返回cookie值,因此,如果您试图使用
    echo setcookie(…)
    获取cookie值,它将无法工作。如果成功设置cookie,该函数返回
    true
    ,否则返回
    false

  • 如果您打算在PHP结束标记之后向浏览器发送内容(一些HTML),请仅使用PHP结束标记
    ?>
    。否则,使用结束标记会增加向浏览器发送不需要的空格和换行符(后面的内容)的可能性

  • 将您的PHP修改为:

    <?php
    //capture values sent by the browser
    $cookieVar = $_POST['cookieVar'];
    $cookieVal = $_POST['cookieVal'];
    
    //set cookie and send result
    if(setcookie($cookieVar,$cookieVal)===true){
        echo "Successfully set cookie $cookieVar to $cookieVal";
    }
    else{
        echo "Failed to set cookie $cookieVar to $cookieVal"
    }
    

    在ajax中,最好使用:

     $.ajax({
        url:'setcookie.php',
        type: 'POST',
        data: {cookieVar: cookieVar,
               cookieVal:cookieVal
        },...
    
    以及您的php setcookie.php。
    我想,
    jQuery.ajax
    会接受一个查询字符串作为
    数据的值。它不一定是一个对象。从docs“Type:PlainObject或String或Array.Data发送到服务器。如果不是字符串,则转换为查询字符串”。资料来源:是的,可以用不同的方法使用数据,但是这样更好、更快、更清晰。但是你知道OP的方法是错误的。。我认为
    错了
    太过分了,因为文档说它没问题,这就是我发表评论的原因。我尝试了一个ajax,它使用的数据与Twirlman使用的数据相同。。。如果变量有空间,它就不起作用。如果我使用阵列,它就可以工作!!这是一个很好的观点,另一种方法对您不起作用,因为查询参数需要进行uri编码(请参阅)。当您使用对象表示法时,
    jQuery
    会为您执行此操作。所以,另一种方法没有错,但你的建议更容易使用:-)@Twirlman,不客气。如果我的回答有助于解决您的问题,请选择它(如果您愿意,请向上投票)。
     $.ajax({
        url:'setcookie.php',
        type: 'POST',
        data: {cookieVar: cookieVar,
               cookieVal:cookieVal
        },...