【问题标题】:action returns empty string on ajax post操作在 ajax 帖子上返回空字符串
【发布时间】:2014-04-05 06:40:16
【问题描述】:

我正在尝试使用 ajax 发布请求发送一个 json 对象。 我在做什么有问题。这是我的代码。

    $.ajax({
        url : formURL,
        type: 'POST',
        data : data,
        success:function(data, textStatus, jqXHR) 
        {
           console.log(data);
        },
        error: function(jqXHR, textStatus, errorThrown) 
        {
            console.log(errorThrown);
        },
    });

无论我尝试在操作中返回什么,错误部分中的 console.log 都会抛出一个空字符串。这是 ajax 帖子发布到的代码的一部分:

    public function saveInfosAction(){
        $request = $this->getRequest();
        $eav = $this->getServiceLocator()->get('Frontend\Model\Eav');
        return "test";
    }    

谁能给我一个提示为什么它不起作用? 提前致谢

【问题讨论】:

  • 你在哪里定义变量dataformURL
  • 试试return new JsonModel(array('foo' => 'bar'));;一定要包括JsonModel
  • var formURL = form.attr("action");调试问题我使用 data = {eav: 'eav', board:'board}
  • 我认为您的请求甚至没有到达服务器。 ajax 错误中jqXHR.readyStatejqXHR.statusjqXHR.responseText 的值是多少?
  • jqXHR.state -> function(), jqXHR.status ->0, jqXHR.responseText --> (一个空字符串)

标签: javascript php ajax zend-framework2


【解决方案1】:

谢谢大家! 我发现了问题。

我试图通过点击带有

的链接来触发提交
    jQuery("#submitInfo").on('click',function(e){..) 

但我忘记了这一行

    e.preventDefault();

所以表单实际上是使用 ajax 函数发布的。

【讨论】:

    【解决方案2】:

    在哪里定义 url 和 data 尝试像url:http://example.com/myfile.php这样的直接网址 像

    这样的数据
    data:{'id':id, 'name': name}
    

    同样发送json然后dataType :'json'

    试试

    $.ajax({
            url : formURL,
            type: 'POST',
            data : data, // data will be like data : {data:data, id: id},
            dataType :'json',
            success:function(data) 
            {
               console.log(data);
            },
            error: function(jqXHR, textStatus, errorThrown) 
            {
                console.log(errorThrown);
            },
    });
    

    也可以使用echoprint 不返回回复您的回复

    【讨论】:

    • 谢谢。它仍然无法正常工作。 formURL 是 "\saveinfos" 也许它有问题?其他表单动作(非 ajax 帖子)在 DOM 中看起来相同(\savegame for saveGameAction)。他们工作。
    【解决方案3】:

    如果jqXHR.readyState=0jqXHR.status=0,那么根据我的经验,这是一个跨域问题。请注意,如果您的网站加载了http://www.domain.com,而您的ajax 是http://domain.com,反之亦然,这将被视为跨域请求。

    在 chrome 中打开您的页面并打开控制台(在页面中右键单击->检查元素->控制台选项卡) 再次运行你的 ajax,看看你得到了什么错误。

    即使 Firefox 什么也没说,chrome 也会提供有关 ajax 错误的更多详细信息

    【讨论】:

    • 可以使用绝对域,至少帖子不再中止(ff 说)。但是 jqXHR 消息还是一样的
    • 您是否尝试过使用 chrome,因为我说“chrome 控制台提供了有关 ajax 错误的更多详细信息”
    • 我试过了,它们是一样的。在网络选项卡中,帖子的状态为“已取消”。 ajax 请求甚至没有达到那个动作。我认为这只是我忽略的一点丑陋的东西
    • 你能上传到某个地方让我测试一下吗?
    • 你需要源代码吗?截屏?我现在无法设置测试服务器。
    【解决方案4】:

    使用 ajax 时,您必须使用 echo 从 ajax 请求页面返回值。将return 更改为echo

    echo "test";
    exit;
    

    【讨论】:

    • 这是错误的 :) 这是一种方式,是的,但肯定不是首选的方式。
    猜你喜欢
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 2019-10-28
    • 2012-01-13
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多