【问题标题】:Website doesn't recognize GET even though manual URL works即使手动 URL 有效,网站也无法识别 GET
【发布时间】:2016-09-22 00:31:26
【问题描述】:

我有一个自定义网站,它会检查document.ready 是否在 URL 行中有一个名为“temp”的参数。如果是这样,我在我的服务器上调用一个 PHP 函数,它将值存储在数据库中。现在对我来说奇怪的是,如果手动输入:

http://mywebsite.org/?temp=7

在我的浏览器中,一切正常。但是如果我使用这个网站来测试 GET:

http://requestmaker.com/

我的网站什么都不做。

这是我的 jQuery 代码,它检查参数是否存在:

$(document).ready(function() {
      var data = gup('temp', location.href);
      if (data != undefined) {
        $.ajax({
          data: {
            action: 'insertTemp',
            value: data
          },
          type: "GET",
          url: "SQL.php",
          success: function(data) {
            //alert("Data Saved " + data);
          },
          error: function(xhr) {
            alert(xhr.responseText);
          }
        });
      }

您是否认为 document.ready 可能是一个问题,因为它没有在自动 HTML 请求中进行检查?

编辑:

Gup是我从网上复制的一个函数,它只是过滤URL中的参数:

function gup(name, url) {
  if (!url) url = window.location.href;
  name = name.replace(/[\[\]]/g, "\\$&");
  var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)", "i"),
    results = regex.exec(url);
  if (!results) return null;
  if (!results[2]) return '';
  return decodeURIComponent(results[2].replace(/\+/g, " "));
}

它在document.ready() 子句之外声明。

这是我从requestmaker.com得到的响应代码:

http://pastebin.com/WL2CQP4v

【问题讨论】:

  • 您是否在浏览器的控制台中查看过错误?你在哪里定义gup()
  • 您好,感谢您的评论,不,我的浏览器不会抛出 anny erros,gup 只是我从互联网上复制的一个函数,用于过滤参数的 url:function gup(name, url) { if (!url) url = window.location.href; name = name.replace(/[\[\]]/g, "\\$&"); var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)", "i"), results = regex.exec(url); if (!results) return null; if (!results[2]) return ''; return decodeURIComponent(results[2].replace(/\+/g, " ")); }
  • 浏览器开发者工具的网络标签中的请求/响应呢?
  • 如果我使用这个命令,这是请求/响应:www.mywebsite.org/temp=2pastebin.com/ZMG58Dc5
  • 所以,AJAX 正在工作。 console.log(data) 在你的成功函数中。

标签: javascript php jquery html xmlhttprequest-states


【解决方案1】:

这是因为 requestmaker.com 仅发送请求并向您显示响应。它并没有真正在网络引擎/浏览器中执行网页。

你没有写出你的最终目标是什么,但如果它是为了自动化测试,也许你应该看看travis-ciphantomjs 或类似的工具。

【讨论】:

  • 感谢您的回答。我的目标是将数据发送到网页并自动将其存储在数据库中。我还尝试从桌面应用程序向我的网站发送 HTML-GET,结果与我的网站未存储数据相同,我不知道为什么。我认为requestmaker 与我的桌面应用程序做同样的事情——它发送一个 html 请求。当然这不会在浏览器中执行,因为通常它不需要浏览器通过 html 请求向网站发送数据(这实际上会占用大量资源),但它仍然可以工作。
  • 一般来说,一个网站有两个部分,客户端和服务器端。你在做什么(检查 url 参数,发送 ajax 请求)来自客户端。但是您正在测试的环境不会执行客户端。据我了解您的目标:您应该在客户端编写所有代码。制作一个 index.php,它读取 $_GET['temp'] 并重定向到您的目标 (SQL.php)。例如:header('Location: /SQL.php?action=insertTemp&value='.$_GET['temp']); NB:这是非常糟糕的代码。您在产品中正确的用户输入卫生。
【解决方案2】:

问题在于您嵌入的 ECMA (Javascript) 代码依赖于浏览器来执行。没有浏览器就不会触发“document.ready”..

【讨论】:

  • 好的...但是我该怎么做呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-21
  • 2021-06-26
  • 2023-03-09
  • 1970-01-01
相关资源
最近更新 更多