0

我目前正在尝试学习使用 ajax,但不幸的是我无法使用success.

$('.engineering-services').live('click', function() {     
$.ajax({
    url: 'index.php?route=information/information/homepage_info',
    type: 'post',
    data: {info_description : 'test'},
    dataType: 'json',
    success:    function(json){
    alert('pass');
    },
    error: function(json) {
    alert('fail');
    }
    });

});

这是php函数...

    public function homepage_info() {
    $json = array();
    if (isset($this->request->post['info_description'])) {  
    echo $this->request->post['info_description'];
    echo '<br /> test2';
    }
    $this->response->setOutput(json_encode($json));
    }

但是,这总是会发出失败警报而不是通过警报。我在这里遗漏了一些明显的东西吗?

编辑:它发现功能正常,因为在控制台中它给出了正确的响应,

IE

测试

测试2

谢谢

4

2 回答 2

1

如果您的 dataType 设置为 json,则返回的不是 JSON 的任何内容都会导致 ajax 调用出错。尝试将一些 json 发送回脚本... {"test":"abc"} 或类似的。echo例如,我在您的代码中看到了几个调用。

不仅如此,打印到浏览器的任何 PHP 错误/警告/通知都会中断调用。

提示:您可以使用json_encode().

于 2013-04-15T13:58:42.973 回答
0

您不能将现有查询字符串与数据结合起来。像这样的东西应该可以工作(或者至少在语法上是有效的):

$.ajax({
    url: 'index.php',
    type: 'post',
    data: {information:'information/information/homepage_info',info_description:'test'},
    dataType: 'json',
    success:function(json){
        alert('pass');
    },
    error:function(json) {
        alert('fail');
    }
});

同样如前所述,任何不是 json 的东西都可能导致错误,所以你不是echo那些 html 组件......如果有的话,你就是print他们。

另外,作为旁注,您的 dataType 应该在服务器端完成,并在其中header('Content-type: application/json');声明index.php而不是在您的 jQuery 脚本中。它保证以这种方式被识别为json,并且Javascript代码也更少。

于 2013-04-15T14:01:34.437 回答