阿贾克斯正在逃避我。如何执行简单的ajax请求?

时间:2012-01-05 01:56:01

标签: php javascript ajax jquery

好的背景我是js和ajax noob。我主要在php和mysql html 5工作,我决定与时俱进,不再为简单的事情重新加载页面。

我正在尝试向php文件发出一个简单的ajax请求并打印结果。

所以在我的页面上我有一个带有id密码的文本bax(来自另一个实验的剩余部分) 一个jquery ui标签设置,带有一个带有id画廊的标签和一个带有id-gallery的div。这个想法是,在点击画廊选项卡后,将拉取密码字段的值并将其发送到php文件my-galleries.php,结果将打印到div my-gallery并显示。

代码:

<input type="password" id="password"/>    
<div id="tabs">
    <ul>
        <li id="welcome"><a href="content/welcome.html">Welcome</a></li>
        <li><a href="content/about.html">About</a></li>
        <li><a href="#my-galleries" id="galleries">Galleries</a></li>
        <li><a href="content/contact.html">Contact</a></li>
    </ul>
    <div id="my-galleries"></div>
</div>

然后是js

$("#galleries").click(function(){
    $.ajax({
        type : 'POST',
        url : 'my-galleries.php',
        dataType : 'json',
        data: {
            password : $('#password').val()
        },
        success: function(msg){
            $("#my-galleries").html(msg)
        }           
    })
});

然后是php

$password= $_REQUEST['password'];
$salt= uniqid();
$str= $salt.$password;
$hash= hash("sha512", $str);
echo $hash;

根据tuts我一直在阅读它应该工作,但事实并非如此。我无法弄明白。

3 个答案:

答案 0 :(得分:4)

你的问题是你正在申请JSON;你的数据肯定不是JSON。这是纯文本,因此请使用'text' dataType

$("#galleries").click(function(){
    $.ajax({
        type: 'POST',
        url: 'my-galleries.php',
        dataType: 'jsontext',
        data: {
            password : $('#password').val()
        },
        success: function(msg) {
            $("#my-galleries").html(msg)
        }
    });
});

答案 1 :(得分:3)

使用浏览器中的调试工具,例如。 Firefox中的Firebug或Google Chrome / Chromium中的开发人员工具。

这将向您显示可能存在的问题。它们可能如下:

  1. 您的JavaScript中存在错误。
  2. 你可能会问错误的目的地。
  3. 请求后可能会有重定向。
  4. 服务器上可能存在错误(导致success()回调未被执行)。使用调试工具检查响应。
  5. 数据类型可能不是您指定的内容。检查它是否是JSON。
  6. $可能未定义。检查是否。
  7. 您的JS可能在DOM对象(特别是具有“galleries”ID的对象)可用之前执行。把你的代码放在例如。在$(function(){/* your code here */});

答案 2 :(得分:0)

你应该改变

echo $hash;

echo json_encode(array('response' => $hash));

然后在你的成功块中访问它:

$("#my-galleries").html(msg.response);

假设你出于某种原因真的想要json。否则绝对使用minitech's answer

...而且,我的意见是,你应该die($hash);而不是echo $hash;:在回复时杀死脚本。