【问题标题】:jquery POST response successful BUT data emptyjquery POST响应成功但数据为空
【发布时间】:2016-05-09 01:12:40
【问题描述】:

我使用 jquery 将帖子发送到我的 api 的会话端点以获取登录令牌。请求返回成功,但数据为空。如果我在 cURL 中执行相同的请求,它会返回 json。 我是 jquery 的新手。有人对可能出现的问题有什么建议吗?

<!DOCTYPE html>
<HTML> 
     <HEAD>
      <TITLE>  login </TITLE>      
    </HEAD>
    <LINK rel="stylesheet" type="text/css" href="login.css" />
  <BODY>
    <DIV id="container">
      <DIV id="header">
        <IMG src="image.bmp" alt="logo" style="width:64px;height:64px;"/>
        <H1> my service </H1>
      </DIV>
      <DIV id="content"> 
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
      <script>
       $(document).ready(function()
       {
         $("button").click(function()
         {
           $.post("www.mydomain.com/api/session",
          {
            username: "batman",
            password: "123"
          },
        function(data,status)
        {
            alert("Data: " + data + "\nStatus: " + status);
        });
    });
});
</script>   
             <DIV id="loginform">
               <form  method="POST">
                  Username: <input type="text" name="username" /><br />
                  Password: <input type="password" name="password" /><br />
                  <button> welcome! </button>
               </form>
             </DIV>
          <DIV id="description">
            <P>mydomain description</P>
            <P>Join now to see what people are doing near you!</P>
          </DIV> 
          <DIV id="register">
            <P>Dont have an account with us? </P>
            <P>Register here now !!</P>
          </DIV> 
       </DIV>   
          <DIV id="nav">
        </DIV>
      </DIV>
    </DIV>
  </BODY>
</HTML>

【问题讨论】:

  • 你检查了控制台是否有同源错误?

标签: javascript jquery html post response


【解决方案1】:

哇!我发现了问题,就是这么简单。我只需要在我的网址前使用 http://。 感谢每一个人的时间和帮助!。

【讨论】:

  • 出于兴趣,您是否发现仍然需要在 URL 中指定文件名,或者它是否适用于会话目录?
  • 它与会话 url 一起工作(假的,但在我的路由脚本中处理)。这是有道理的,因为这是我 cURL 所在的地址,我得到了正确的响应。只是因为我在 apache 服务器上的 mod_rewrite 将所有不在文件系统中的文件位置的请求发送到路由器,无论其有效性如何。并且它把 www,mydomain.api/session 当作一个不存在的文件地址,所以它只是去了路由器,什么也没做,然后退出。我希望你遵循我的意思。感谢您的帮助
  • 用http://把它当作一个地址,正确地重定向到路由器脚本中的物理文件
【解决方案2】:

此外Punit的回答,我建议使用$.on()方法,它比.click()函数更好。

$(function() {
// equals to $(document).ready(function(){ but faster to wright
  $("#loginform").on('click', 'button', function() {
      //Punit's Code (that is good !!)
      $.ajax({ url: 'your_url_here',
           data: {username: 'batman' , password : "123"},
           type: 'post',
           dataType: "json",
           success: function(output) {
                        alert(output);
                    }
      });
  });
});

【讨论】:

【解决方案3】:

问题可能是您需要在执行按钮单击事件后停止提交表单。如所写,一旦脚本完成,页面就会刷新,并且没有机会处理发布请求的结果。从 click 函数返回 'false':

   $("button").click(function() {
       $.post("www.mydomain.com/api/session",
      {
        username: "batman",
        password: "123"
      },
      function(data,status)
      {
          alert("Data: " + data + "\nStatus: " + status);
      });
      return false;
    }    
   );

完成后,您应该会看到您的发布请求是否返回了任何数据。请注意,因为您要发布到目录,所以脚本将默认查找索引文件,例如索引.php。如果这是个问题,请将您的 URL 更改为直接指向相关的服务器端脚本。

【讨论】:

  • 我通过一个脚本路由我的服务器中的所有请求。使用 cURL 会话 url 可以正常工作并返回带有身份验证令牌的 json。但是现在,即使使用您的代码(至少使代码再次运行),数据也是空的。我看不懂
  • 我仍然没有得到任何数据。并且响应头也是空的。为什么它在 curl 而不是在这里工作
  • 以上对我来说适用于一个简单的本地测试设置:我发布到一个包含 index.php 的“会话”目录,它回显了一些测试数据。结果数据按预期发出警报。它可能与您路由请求的方式有关吗?如果您还没有,可以尝试暂时更改 URL 以直接指向您的服务器端脚本,看看是否有任何不同。
  • 烦人的是,我终于得到了响应,但是,它不是我通过卷曲干净的 url 得到的正确响应,因为在路由脚本中创建了一些使请求工作所需的变量(其中其他东西),如果我调用服务器上的直接文件路径,则绕过此路由脚本
  • 所以我的本质。它必须通过路由脚本作为一个干净的 url 调用
【解决方案4】:

以下是创建 Ajax 调用的步骤,现在您必须执行此操作。您必须从 URL 将数据返回为 json 格式,然后在成功函数中尝试 console.log(output),您会发现 hot 它是有效的。

$.ajax({ url: 'your_url_here',
             data: {username: 'batman' , password : "123"},
             type: 'post',
             dataType: "json",
             success: function(output) {
                          alert(output);
                      }
    });

如果你不明白任何地方,请告诉我,

【讨论】:

  • 谢谢我试一试。好资料
  • 如果您的代码在线,请告诉我们,这将帮助我找到合适的解决方案,
  • 我显然不知道我在做什么。我现在有了修改后的脚本部分:
  • 好的,我明白了。您正在做的是在 URL“www.thetenticle.com/api/session”上发布变量。在这里,我们的 ajax 调用工作正常。但是我们调用它的 URL 应该返回一些东西给我们。目前我不认为它是否返回任何东西,这就是我们得到空白响应的原因。让我与您分享一些 linjk,它可以帮助您了解 ajax 调用是如何检查用户名和密码的。
  • 好的,但是响应是用 curl 返回的。我得到一个 json HAL。如果您尝试通过该 url 登录,它将无法正常工作。它需要 curl 编辑
猜你喜欢
  • 1970-01-01
  • 2019-03-01
  • 2013-05-03
  • 1970-01-01
  • 1970-01-01
  • 2015-07-29
  • 2017-10-31
  • 2021-09-09
  • 1970-01-01
相关资源
最近更新 更多