1

我有一些问题

我的html:http: //jsfiddle.net/dHdnb/

我的jQuery:

$(".header_nav li a").click(function(){
  var href = this.href;
  $.ajax({
  url: 'dynamic.php',
  type: 'POST',
  data: { target: href },
  success: setTimeout(function(){
           $.ajax({
           url: 'dynamic.php',
           dataType: 'html',
           data: { target: href},               
           success: function(data) {
                    $(".container").html(data)
                    }           
           })
           }, 1000)

})

这是我的php代码:

<?php
  $target = $_POST["target"];
  echo $target;

  function home(){
  echo $target;
  // some command
  }
  switch($target) {
  case "home": home();
  break;
  // and so on
  default;
  }

  $target = isset($_POST['target']) ? $_POST['target'] : 'default_target_value';
  echo $target;

  echo "Test ajax";
?>

让我解释一下,如果用户单击这些列表上的按钮,
然后它将目标变量发布到服务器
,服务器将处理请求并
最终启动一个函数,当 ajax 处理成功时,它将加载数据从服务器到容器 div

我的问题是,为什么它给了我这样的错误?
“注意:未定义的索引:第 7 行的 xxx.php 中的目标”
我知道我的 ajax 上的数据一定有问题,
但我不知道我的错误在哪里,
请帮助我 :)

当我用 charles 调试它时,ajax 发送带有文本字符串的数据,就像
我的POST请求原始:

POST /xxx/dynamic.php HTTP/1.1
Host xxx
Content-Length 67
Accept /
Origin http://xxx
X-Requested-With XMLHttpRequest
User-Agent xx Content-Type application/x-www-form-urlencoded; charset=UTF-8
Referer http://xxx.php
Accept-Encoding gzip,deflate,sdch
Accept-Language en-US,en;q=0.8

目标=http%3A%2F%2Fxx%2Fxx%2Fhome.php%23product

我的POST响应原始:

HTTP/1.1 200 OK
日期:2013 年 9 月 10 日星期二 09:35:19 GMT
服务器:Apache/2.4.4 (Win32) OpenSSL/0.9.8y PHP/5.4.16
X-Powered-By:PHP/5.4.16
内容-长度:57
内容类型:文本/html

http://xxx.php#productTest ajax

我的GET请求原始:

GET xxx.php HTTP/1.1
主机:xxx
接受:text/html, / ; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: xx
Referer: http://xxx.php
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8

我的GET响应原始:

HTTP/1.1 200 OK
日期:2013 年 9 月 10 日星期二 09:45:43 GMT
服务器:Apache/2.4.4 (Win32) OpenSSL/0.9.8y PHP/5.4.16
X-Powered-By:PHP/5.4.16
内容-长度:152
内容类型:文本/html

注意:未定义的索引:第2行的dynamic.php中的目标 测试 ajax

4

5 回答 5

7

有有效的代码!

var href = this.href;
        $.ajax({
        url: 'dynamic.php',
        type: 'POST',
        data: { target: href },
        success: function (data) {
                    setTimeout(function (){
                    $(".container").html(data)
                    }, 1000)
                }
        });

不需要做get ajax命令,只需要直接输出success:上面的数据!:)

于 2013-09-11T10:50:31.240 回答
0

问题是,您在发出 secong 请求时没有发送任何数据:

$(".header_nav li a").click(function(){
  $.ajax({
  url: 'dynamic.php',
  type: 'POST',
  data: { target: this.href }, //i can see the data here
  success: $.ajax({
           url: 'dynamic.php', //notice the same PHP script
           dataType: 'html', // where is the data in this request?               
           success: setTimeout(function(data){
           $(".container").html(data)
           }), 1000)
  })
});

所以起初它可以工作,但是在执行第二个请求时,PHP 找不到“目标”,因为您没有发送它。

最好先缓存href:

$(".header_nav li a").click(function() {
    var href = this.href;
    $.ajax({
        url: 'dynamic.php',
        type: 'POST',
        data: {
            target: href //data for first request
        },
        success: $.ajax({
            url: 'dynamic.php',
            dataType: 'html',
            data: {
                target: href //data for the second request
            },        
            success: setTimeout(function(data) {
                $(".container").html(data)
            }),
            1000);
        })
    });
});

或者另一种解决方案是检查 PHP 中是否存在“目标”:

<?php
    $target = isset($_POST['target']) ? $_POST['target'] : 'default_target_value';

    function home(){
        // some data like echo and so on
    }

    switch($target) {
      case "home": home();
          break;
          // and so on
          default;
    }
    echo "Test ajax";
?>
于 2013-09-10T09:55:55.433 回答
0

在你的ajax定义中你不应该将数据作为数组传递吗?尝试更改数据:与以下内容一致,应该适合您:

data: { target: the_varibable_you_want_to_pass_by_post }

编辑:根据您的评论和编辑的 OP 源和@Arthur 回答

 $(".header_nav li a").click(function(){
     var clicked_link = $(this); //the variable stores the refference to the clicked "a" element
        $.ajax({
        url: 'dynamic.php',
        type: 'POST',
        data: { target: clicked_link.href }, //so now you can reffer to the href of the "a"
                 success: $.ajax({
                 url: 'dynamic.php',
                 type: 'POST',
                 data: { target: clicked_link.href },
                 dataType: 'html',                
                 success: function(data){
                 $(".container").html(data)
                 }
        })
      })

在您之前的代码中,“this”不是指单击的链接,而是指没有“href”属性的 ajax 对象。

于 2013-09-09T14:14:30.113 回答
0

您没有以 PHP 可以解码和填充的格式对数据进行编码$_POST。您正在发送纯文本字符串。

改变:

data: target,

data: { target: this.href },
于 2013-09-09T14:13:33.277 回答
0

像您一样通过 AJAX 发送数据时,您必须复制表单提交,例如

$.ajax(...
   data: 'foo'
);

将向服务器发送一个裸字符串“foo”。但是拥有

$.ajax(...
    data: 'bar=foo'; // key=value pair
    // OR
    data: {bar: 'foo'} // javascript key/value object
);

您将获得 PHP 的正确数据来为您填充 $_GET/$_POST。没有键/值对,$_GET/$_POST 中没有条目。就是这么简单。

于 2013-09-09T14:13:48.010 回答