【问题标题】:Making an alert() with PHP and ajax使用 PHP 和 ajax 制作 alert()
【发布时间】:2015-06-22 22:44:34
【问题描述】:

我有一个将一些数据提交到我的 PHP 文件的 ajax 函数。在我的 PHP 文件中,我对它对这些数据进行了一些检查,然后我尝试发出警报以提出要说的话。不过,我无法收到任何警报。所有发生的事情都在控制台->网络->提交.php->响应中显示应该发出警报的javascript。

这是我的 Ajax,我知道它可以工作:

$('#submit').click(function() {
    if(selectedImageArray.length <= 10){
  $.ajax({
    method: "POST",
    url: "submit.php",
    data: {selectedImageArray: selectedImageArray}
  }).done(function( msg ) {
    //alert( "Data Saved: " + selectedImageArray );
  });   }else{
        alert( "You can only trade up to 10 items at once." );
    }
});

然后在 submit.php 中我做了一些检查,得到了这个:

        if($QueueCount == 1){
            Echo '<script language="javascript">';
            Echo 'alert( "You already have an active trade, check your Steam profile.");';
            echo '</script>';
        }else{
            Echo '<script language="javascript">';
            Echo 'alert("You are currently in the trade Queue, you should receive a trade request soon.");';
            echo '</script>';
        }

这应该会发出警报,但它只是将&lt;script language="javascript"&gt;alert( "You already have an active trade, check your Steam profile.");&lt;/script&gt; 输出到网络选项卡中,就像我说的那样。

如何使这项工作从 PHP 文件中弹出警报?

【问题讨论】:

  • 您应该只返回文本字符串并在您的成功函数中处理警报,就像您现在拥有的注释掉的行一样。 msg 包含您的 javascript 块,但如果您不对其执行任何操作,则不会发生任何事情。
  • ajax 调用返回文本。就这样。你只是得到一些文本(恰好是 javascript),它会一直保持文本,直到你把那个文本放在某个地方使它变得可执行 - 例如,将该文本作为一个实际的 DOM &lt;script&gt; 节点插入到你的文档中。

标签: javascript php jquery ajax


【解决方案1】:

你试图从 php 中输出 javascript,而不是在你的 ajax 回调中输出,这是行不通的。

做你想做的最简单的方法是用你的php返回字符串,然后处理输出到你的javascript。

类似:

if($QueueCount == 1){
        Echo "You already have an active trade, check your Steam profile.";
    }else{
        Echo "You are currently in the trade Queue, you should receive a trade request soon.";
    }

对于 javascript

$('#submit').click(function() {
  if(selectedImageArray.length <= 10){
      $.ajax({
        method: "POST",
        url: "submit.php",
        data: {selectedImageArray: selectedImageArray}
      }).done(function( msg ) {
        alert(msg);
      });   
  }else{
        alert( "You can only trade up to 10 items at once." );
    }
});

【讨论】:

    【解决方案2】:

    您的 javascript 代码必须如下所示:

    $('#submit').click(function() {  
      if(selectedImageArray.length <= 10){
        $.ajax({
          method: "POST",
          url: "submit.php",
          data: {selectedImageArray: selectedImageArray},
          success: function(data,status){
            eval(data)
          }
        });   
      }else{
        alert( "You can only trade up to 10 items at once." );
      }
    });
    

    而且你的 php 代码不应该声明脚本标签:

        if($QueueCount == 1){
            echo 'alert( "You already have an active trade, check your Steam profile.");';
        }else{
            echo 'alert("You are currently in the trade Queue, you should receive a trade request soon.");';
        }
    

    确保这是您的 php 文件的唯一输出。

    此外,这段代码在投入生产之前还需要一些改进,例如回调服务器端处理的错误,检查 ajax 是否由于网络问题和 XSS 保护完全没有失败,仅举几例。

    【讨论】:

    • 我的网站越多,出现的问题就越多。您能否向我展示解决这些其他问题的任何具体方法,或为我指明了解这些问题的方向?
    • 当然:在此处了解 XSS 保护:google.com.br/about/appsecurity/learning/xss 并且对于可能的失败,您可以在 $.ajax 调用中使用函数作为“错误”参数。对于服务器端处理问题(即,如果脚本中收到的数据不是您所期望的),您可以回显类似“错误数据格式错误”的字符串并使用 HTTP 标头 400,然后检查其标头或返回的文本你成功的函数来相应地处理它。
    猜你喜欢
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 2018-05-16
    • 1970-01-01
    • 2014-07-08
    相关资源
    最近更新 更多