我有一个按钮,单击后会将用户插入表格。
基本上,我无法从我的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。还是一样的错误。
答案 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",
});