【问题标题】:jQuery AJAX vs. XMLHttpRequestjQuery AJAX 与 XMLHttpRequest
【发布时间】:2014-10-09 12:23:07
【问题描述】:

正在寻找this question 的答案 结果我得到以下代码工作正常:

xhr = new XMLHttpRequest();
xhr.onreadystatechange=function()
{
    if (xhr.readyState==4 && xhr.status==200)
    {
        response = JSON.parse(xhr.responseText);
        if(typeof response =='object') {
            $('#modal-spinner-seo-update').hide('slow');
            jQuery.each(result, function(field, message) {
                $('#seo-'+field).next('div.error-message').html(message).fadeIn('fast');
            });
        } else {
            $('#modal-spinner-seo-update').hide('slow', function() {
                $("#seo-widget-message-success").fadeIn('slow').delay(2000).fadeOut('slow');
            });
        }
        return false;
    }
};
xhr.open('GET','/metas/saveMetas?model='+model+'&f_key='+f_key+'&pagetitle='+pagetitle+'&keywords='+keywords+'&description='+description+'&niceurl='+niceurl, true );
xhr.send();

但是这个 jQuery 版本不起作用。 那么任何人都可以发现错误吗?有没有? jQuery AJAX 版本在我的本地主机上运行良好,但在服务器上却不行,但返回 403 禁止错误。这是一个 cakePHP 项目。

所以我希望有人能告诉我出了什么问题或缺少什么设置。

$.ajax({
    url: '/metas/saveMetas',
    data: {
        "model": model,
        "f_key": f_key,
        "pagetitle": pagetitle,
        "keywords": keywords,
        "description": description,
        "niceurl": niceurl
    },
    dataType: 'json',
    complete: function(){
        return false;
    },
    success: function(result) {
        if(typeof result =='object') {
            $('#modal-spinner-seo-update').hide('slow');
            jQuery.each(result, function(field, message) {
                $('#seo-'+field).next('div.error-message').html(message).fadeIn('fast');
            });
        } else {
            $('#modal-spinner-seo-update').hide('slow', function() {
                $("#seo-widget-message-success").fadeIn('slow').delay(2000).fadeOut('slow');
            });
        }
        return false;
    }
});

【问题讨论】:

  • 浏览器控制台中的任何错误
  • 返回值是多少?
  • Google 开发工具控制台返回:'GET example.com/metas/…...ywords=fdgdfg+dfgdfg&description=sdfsdfsdf+fghfghfgh&niceurl=dfgdfg-dfgdfg 403(禁止)'
  • 字符串typeof xhr.responseText =='object'如何成为对象?
  • 哦,那是我的错,我发布了错误的代码版本......我将编辑答案

标签: javascript php jquery ajax cakephp


【解决方案1】:

除了 dataType 之外,还有其他需要考虑的事情:

由于它返回 403 错误,您是否在 CakePHP 项目的 'MetasController' 的 beforeFilter() 中的 $this->Auth->allow() 方法中添加了 'saveMetas' 方法?

class MetasController extends AppController {
    public function beforeFilter() {
      parent::beforeFilter();
      $this->Auth->allow('saveMetas');
    }
    ...
    ...
}

编辑:

既然你说你已经这样做了,那么你的 saveMetas 函数中是否也有 $this->autoRender = false;$this->layout = 'ajax';

最后,由于您可以直接访问该页面,因此在初始函数调用后执行pr( $this->request ) 并在没有 AJAX 的情况下访问该页面以查看它告诉您的内容。 403 禁止告诉我这是权限问题。

【讨论】:

  • 是的,我已经这样做了......我想如果我不这样做,XMLHttpRequest 也不会工作......
  • 太棒了,我弄错了:在第 58 行的 /[...]/Controller/MetasController.php 中找不到 Class 'User' 但是有一个 User 类 ...
  • 您是通过关系将用户类添加到模型中还是通过 MetasController 中的 App::uses() 添加用户类?
  • 我的模型中有 User.php 和一个静态函数 get(),然后在第 58 行我调用 User::get()
  • 您是否通过 $this->loadModel('User') 在 MetasController 中加载了用户模型?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-30
  • 1970-01-01
  • 2012-12-09
  • 2016-10-02
  • 1970-01-01
  • 2010-11-14
相关资源
最近更新 更多