【问题标题】:Controller function call from JS- JSON parse error - only in firefox来自 JS-JSON 解析错误的控制器函数调用 - 仅在 firefox 中
【发布时间】:2019-04-28 06:13:12
【问题描述】:

我有一个按钮,点击它应该将用户插入到表格中。

基本上我坚持从我的 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 列出现意外字符

尝试数据类型为 html、json 和 text。还是一样的错误。

【问题讨论】:

  • 我在那里只看到一个 JSON.parse。在您的代码尝试解析它之前,您应该尝试记录 jqXHR 和/或 jqXHR.responseText 以查看您的问题是否变得更清晰。
  • 你的意思是 console.log(jqXHR) 在 var 错误行之前?
  • 我刚刚检查过..它似乎只在 Firefox 中发生...在 chrome 中我正在获取控制器打印语句

标签: javascript php jquery zend-framework2


【解决方案1】:

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

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

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

查看有关如何在 Zend 中正确返回 Json 的更多信息,例如在此博客文章中:https://akrabat.com/returning-json-from-a-zf2-controller-action/

有效的 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",
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    相关资源
    最近更新 更多