2016-05-13 44 views
2

尝试从使用AJAX的PHP页面xyz.php中的play.php发送javascript变量x和y,但无法这样做。你们可以善意告诉我这里有什么问题吗?使用AJAX的js变量到PHP

function clicked(evt){ 
      var e = evt.target; 
      var dim = e.getBoundingClientRect(); 
      var x = evt.clientX - dim.left; 
      var y = evt.clientY - dim.top; 

      $(document).ready(function() { 

       $.ajax({ 
        type: "POST", 
        url: 'play.php', 
        data: {X: x }, 
        success: function(data) 
        { 
         alert("success! X:" + data); 
        } 

       }); 

       }); 
} 

和xyz.php

<?php 
    if (isset($_GET["X"])) { 
    $x = $_GET["X"]; 
    echo $x; 
    }else{ 
    echo 'no variable received'; 
    } 
?> 
+2

你正在做一个POST请求,你通过GET方法得到你的php文件。 –

+0

您在AJAX调用中使用POST方法,因此您必须在您的php脚本中检查$ _POST而不是$ _GET。 – labzus

+1

如何调用'clicked'?为什么'$(document).ready(function(){'* inside * that function? –

回答

0

您发送使用 “POST” 您的数据和使用接受 “GET”

请重写像PHP代码如下

<?php 
if (isset($_POST["X"])) { 
    $x = $_POST["X"]; 
    echo $x; 
}else{ 
    echo 'no variable received'; 
} 
?> 

并检查它是否正常工作

+0

看到它仍然无法正常工作。 – muzibaloutche

+0

@muzibaloutche,在javascript中提醒x的值。它展示了什么? – Arun

+0

仍然没有。我可以从控制台看到这个:play.php:49 Uncaught ReferenceError:$没有为这行定义:$(document).ready(function(){ – muzibaloutche

0

根据你的HTML你可以点击绑定为如下所示,here the example working你有2次失误在你的代码中的第一个,该事件在准备好时加载你的窗口进行烧成,这一定是外面:

$(document).ready(function() { 
    //svg selector you can adapt it what you need 
    $('svg').on('click', function(evt){ 
    var e = evt.target; 
    var dim = e.getBoundingClientRect(); 
    var x = evt.clientX - dim.left; 
    var y = evt.clientY - dim.top; 

    $.ajax({ 
     type: "POST", 
     url: 'play.php', 
     data: {X: x }, 
     success: function(data) 
     { 
      alert("success! X:" + data); 
     } 

    }); 
    }); 
}); 

而且其次,您通过GET获取参数,它们应该通过POST获取。

if (isset($_POST["X"])) { 
$x = $_POST["X"]; 
echo $x; 
}else{ 
    echo 'no variable received'; 
} 
+0

与你的方法我得到的东西都写在这个特定的页面上,作为long long long alert message我的页面脚本),它比我的屏幕大小没有关闭按钮,我不得不强制退出eclipse n然后重新启动它以便能够再次工作 – muzibaloutche

+0

将id设置为元素,并使用选择器获取它: '

0

你的PHP脚本应该是:

<?php 
    if (isset($_POST["X"])) { 
     $x = $_POST["X"]; 
     echo $x; 
    }else{ 
     echo 'no variable received'; 
    } 
?> 
0

这是一对夫妇不同的解决方案的混合体。在将<g> svg元素直接绑定到onclick事件时,我收到了错误消息。所以我采取了更多的间接路线。我在<g>元素上添加了一个id标记,然后为该事件上的点击事件创建了jQuery侦听器,然后调用该函数。这里有一个的jsfiddle:https://jsfiddle.net/aedo6pmc/2/

这里的svg元素:

<svg xmlns="w3.org/2000/svg"; xmlns:xlink="w3.org/1999/xlink"; width="500" height="500"> <g transform="translate(30 30)" id="gSquare"><rect id="rect1" x="0" y="0" width="50" height="50" fill="red"/></g> </svg> 

和JavaScript:

$(document).ready(function() { 
    $('#gSquare').on('click', function(e){ 
     e.preventDefault(); 
     clicked(e); 
    }); 

    function clicked(evt){ 
     e = evt.target; 
     dim = e.getBoundingClientRect(); 
     x = evt.clientX - dim.left; 
     y = evt.clientY - dim.top; 
     console.log(x + ' ' + y); 

     $.ajax({ 
      type: "POST", 
      url: 'play.php', 
      data: {X: x }, 
      success: function(data) 
      { 
       alert("success! X:" + data); 
      } 
     }); 
    } 
}); 

只注意到何塞更新了自己的答案,包括同类型的方法。他将其直接绑定到svg元素,这可能已足够,但请确保如果页面上有多个svg,则您希望每个svg具有相同的行为。

+0

我仍然无法在您的解决方案中回显x在我的其他php页面中,我可以在控制台中看到x和y,但在其他html页面中,它仍然“未收到变量”被回显,并且还带有“成功X:“对于页面中的所有脚本,它仍然是巨大的。 – muzibaloutche