来自JS的控制器函数调用-JSON解析错误-仅在firefox中

时间:2018-11-26 14:59:38

标签: javascript php jquery zend-framework2

我有一个按钮,单击后会将用户插入表格。

基本上,我无法从我的javascript中调用控制器函数。

HTML按钮。

<div class="continue_btton">
    <input type="submit" name="submit" id="SaveSettings" value="<?php echo $this->translate('Update'); ?>" class="update bdr_rds2" onclick="if($('input[name=target_criteria]:checked').val() == 'optedin_users')
                                                                                                                                                {
                                                                                                                                                    return someFun()
                                                                                                                                                } else 
                                                                                                                                                {
                                                                                                                                                    return validateForm()
                                                                                                                                                }
    ">
</div>

已更新

JavaScript

 function someFun(){
    var urlInsert = '@Url.Action("myFunAction")';
        $.get(urlInsert, function () {
    });

}

也在下面尝试,但是控制器功能未调用

function myFunAction(){
    var formData = $("#Preference").serialize();
    $.ajax({
        type: 'POST',
        url: '/advertiser/campaign/myFun',
        data: formData,
        dataType: 'html',
        success: function (data) {
            $('span.targetCount').text($.trim(data));
        },
        error: function (jqXHR, textStatus, errorThrown) {
            var error = $.parseJSON(jqXHR.responseText);
            var content = error.content;
            console.log(content.message);
            if (content.display_exceptions)
                console.log(content.exception.xdebug_message);
        },

    });
}

Controller.php -似乎没有被调用

public function myFunAction(){
    echo '+++myFUN---';exit;

}

错误:

  

JSON.parse:JSON数据第1行第1列的意外字符

尝试将dataType设置为html,json和text。还是一样的错误。

1 个答案:

答案 0 :(得分:0)

我的猜测是您的帖子数据或您的响应对象不被视为有效的json,这就是Firefox引发错误的原因(也许Chrome更宽容)。您可以检查的是请求是否正确发送,服务器的响应是否真正到达以及它是否为有效的json。您应该考虑从控制器中的myFunAction方法返回有效的json(而不是像现在这样打印字符串):

public function myFunAction(){
    $data = '+++myFUN---';

    return new JsonModel([
        'data' => $data
    ]);
}

例如,在以下博客文章中https://akrabat.com/returning-json-from-a-zf2-controller-action/

中,详细了解如何正确返回Zend中的Json。

有效的json响应应将content-type标头设置为application/json,并在响应正文中包含有效的json字符串。 Zend JsonModel将为您提供帮助。

发布数据时,还应将请求的content-type设置为application-json,就像服务器理解您正在发送带有数据的json对象一样。

我从不使用JQuery,但如果我没记错的话,我认为这样做是这样的:

$.ajax({
  type: 'POST',
  url: '/advertiser/campaign/myFun',
  data: formData,
  contentType: "application/json",
});