【问题标题】:Sending Ajax data to current page将 Ajax 数据发送到当前页面
【发布时间】:2014-05-25 21:00:08
【问题描述】:

我有一些数据将用作图片库的一部分,但我不想在加载数据之间刷新页面(有些界面项我希望保持可见)。但是,当我通过 ajax JS 将数据提交到同一页面时,会成功执行代码(出现警告框),但 PHP 无法收集数据。

我的 JQuery 看起来像这样

$(".gallery_thumbnail").click(function(){
  var id=$(this).attr("data-id");
  $.ajax({
    type: "GET",
    url: "test.php",
    data: {newid:id},
    dataType: 'text',
    success:function(result){
      // Test what is returned from the server
      alert(result);
    }
  });
});

我的 PHP 看起来像这样\

if(isset($_GET['newid'])){
  echo "success";
}
else{
  echo "fail";
}

我看到了类似的问题,并尝试复制和粘贴答案,但我似乎无法让它发挥作用。我也试过 url 参数:

http://localhost/test.php and simply removing the url parameter altogther.

【问题讨论】:

  • 你是说alert(result) 向你展示if(isset($_GET['newid'])){... 吗?
  • 如果您提交表单,您应该使用 POST 而不是 GET。如果你要发送一个ajax请求,你应该在服务器stackoverflow.com/questions/4301150/…检查它。
  • 所有在这里给出答案的人都希望 OP 理解问题解决而不是复制粘贴并在一周内提出几乎类似的问题
  • alert(result) 显示整个页面 dom(HTML 代码)。我实际上并没有提交表单,但如果我使用 POST 或 GET,结果会失败。

标签: php jquery ajax


【解决方案1】:

检查请求是否为ajax,然后进行ajax处理

// this code should go before any of the web page code
if (isset($_GET['ajax'])){
    if(isset($_GET['newid'])){
      echo "success";
    }
    else{
      echo "fail";
    }
    exit;
}

设置一个参数看看是否是ajax请求

  $.ajax({
    type: "GET",
    url: "test.php",
    data: {newid:id, ajax: 'true'},
    dataType: 'text',
    success:function(result){
      // Test what is returned from the server
      alert(result);
    }
  });

【讨论】:

  • 当我尝试这个时,成功警报显示但 php 没有触发。
  • 您需要放置相关的 PHP 代码来代替或补充您的“成功”回声。听起来您想要执行的任何 PHP 代码本身都不应该输出任何其他内容(如果您只想返回“成功”作为响应)。似乎问题在于您在问题描述中将两者结合在一起......同时输出“成功”和页面上的默认内容的其余部分。
  • 所以我进一步简化了 php 代码,现在它只是对 newid 执行 Get 请求并尝试将变量回显到屏幕上。我现在得到一个未定义的错误
【解决方案2】:

我认为问题在于您对您在这里要完成的工作或应该如何做有些混淆。

试试

if(isset($_GET['newid'])){
  // Do whatever you want when the script gets an AJAX request

  // You want to exit early to avoid having the whole page show up in the alert()
  exit;
}

// Your normal, non-AJAX PHP code goes here

请注意,您的页面在 alert() 中完整返回,因为您没有提前退出,您可能希望为 AJAX 响应这样做。按照您的设置方式,整个页面会被发回,就像您从浏览器视口请求一样。

【讨论】:

  • 您也可以将非 AJAX 代码包装在 else{} 块中,而不是在满足条件时提前退出。
  • 我已经尝试过了,但警报仍然返回整个页面代码。
  • 那么我认为您对问题的描述中缺少一些东西。尝试@Musa 的代码,但是将在发出 AJAX 请求时要运行的 PHP 代码放在输出“成功”的同一块内。但同样,不要将整个页面的代码放在该博客中……这只是在进行 AJAX 调用时您想要运行的代码。确保那里没有其他东西会输出任何东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-10
相关资源
最近更新 更多