Php Symfony2和Submit-wit-JavaScript:如何获取html内容
我有一个在Symfony2项目的表格,我需要提交表格。第一个想法是使用ajax提交,但问题是这将无法通过symfony2所需的验证,我收到了CSRF错误消息(请参阅我前面的问题:) 感谢@Elnur的回答,我现在可以使用$post提交表格,但还有一个问题 使用Ajay,我将返回一个html响应,并且我能够将此响应附加到一个html元素:Php Symfony2和Submit-wit-JavaScript:如何获取html内容,php,javascript,json,post,symfony,Php,Javascript,Json,Post,Symfony,我有一个在Symfony2项目的表格,我需要提交表格。第一个想法是使用ajax提交,但问题是这将无法通过symfony2所需的验证,我收到了CSRF错误消息(请参阅我前面的问题:) 感谢@Elnur的回答,我现在可以使用$post提交表格,但还有一个问题 使用Ajay,我将返回一个html响应,并且我能够将此响应附加到一个html元素: $.ajax({ type: "POST", async: true, url: href, cache: false,
$.ajax({
type: "POST",
async: true,
url: href,
cache: false,
dataType: "json",
success: function(data) {
$("#content .contentwrap .itemwrap").html( data.content );
}
});
以下是我得到的答复:
<div class="item item-last">
<h1>Create Affiliation</h1>
<div class="error">
<ul><li>The CSRF token is invalid. Please try to resubmit the form</li></ul>
<ul><li>The Affiliation should not be blank</li></ul>
</div>
</div>
<div class="item item-last">
<form action="/app_dev.php/user/submission/affiliation/create/4a0ad9f8020c5cd5712ff4c4c8921b32?ajax=no" method="POST" class="authorForm" >
<div style="float:left;">
<table width="100%" cellspacing="0" cellpadding="0">
<tr>
<td>
<label for="submissionAffiliationForm_affiliation" class=" required">Affiliation</label>
</td>
<td>
<input type="text" id="submissionAffiliationForm_affiliation" name="submissionAffiliationForm[affiliation]" required="required" size="40" />
</td>
</tr>
<tr>
<td>
</td>
<td>
<div class="button button-left button-cancel">
<img src="/bundles/sciforumversion2/images/design/new/button-red.png"/>
<a href="/app_dev.php/user/submission/author/edit/4a0ad9f8020c5cd5712ff4c4c8921b32/0" class="submission_link">cancel</a>
</div>
<div style="float: left;"> </div>
<div class="button button-left button-cancel">
<img src="/bundles/sciforumversion2/images/design/new/button.png"/>
<input type="submit" name="login" value="submit" />
</div>
<div style="clear: both;"></div>
</td>
</tr>
</table>
</div>
<input type="hidden" id="submissionAffiliationForm__token" name="submissionAffiliationForm[_token]" value="de9690f61f0ee5f30fdcc5152f44e76787f34bbb" />
</form>
</div>
我得到的不再是HTML,而是JSON格式的响应,我不知道如何从中提取正确的信息
以下是我从帖子中得到的回复:
{"responseCode":400,"errors":false,"submitted":false,"content":"<!DOCTYPE html>\n<html>\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text\/html; charset=utf-8\" \/>\n <meta http-equiv=\"refresh\" content=\"1;url=\/app_dev.php\/user\/submission\/4a0ad9f8020c5cd5712ff4c4c8921b32\" \/>\n\n <title>Redirecting to \/app_dev.php\/user\/submission\/4a0ad9f8020c5cd5712ff4c4c8921b32<\/title>\n <\/head>\n <body>\n Redirecting to <a href=\"\/app_dev.php\/user\/submission\/4a0ad9f8020c5cd5712ff4c4c8921b32\">\/app_dev.php\/user\/submission\/4a0ad9f8020c5cd5712ff4c4c8921b32<\/a>.\n <\/body>\n<\/html>","notice":""}
您的问题是返回的是全新的HTML内容。
您只需要返回您的JS能够理解并以您想要的方式处理的信息
use Symfony\Component\HttpFoundation\Response;
SF中的此类允许您返回普通内容
这里有一个使用它的方法
if ($valid) {
$data = array(
'success' => true,
'responseCode' => 307, /* Redirect Temp */
'redirectURI' => $this->generateUrl('SciForumVersion2Bundle_user_submission', array("key"=>$submission->getHashKey())),
'message' => '<h3>You\'re about to be redirected...</h3>'
);
} else {
$data = array(
'success' => false,
'responseCode' => 400, /* Bad Request */
'message' => '<h3 class="error">Cannot send form<br>* Field NAME is empty</h3>'
);
}
$json = json_encode($data);
/* Response($data,$statusCode,$additionnalHeaders) */
return new Response($json,200,array('Content-Type'=>'application/json'));
JS
你能给我们看看你的控制器吗?@Touki,谢谢。我将在一分钟内更新我的问题。您的AJAX请求需要返回。Symfony正在尝试重定向用户。不能从AJAX请求重定向。如果你想显示内容,就这样做<代码>$(“#content.contentwrap.itemwrap”).html(data.content)代码>是。这将用Symfony重定向填充你的“.itemwrap”。让我们来回答这个问题,并提供极好的帮助,一个真正的专业人士。非常感谢你。
use Symfony\Component\HttpFoundation\Response;
if ($valid) {
$data = array(
'success' => true,
'responseCode' => 307, /* Redirect Temp */
'redirectURI' => $this->generateUrl('SciForumVersion2Bundle_user_submission', array("key"=>$submission->getHashKey())),
'message' => '<h3>You\'re about to be redirected...</h3>'
);
} else {
$data = array(
'success' => false,
'responseCode' => 400, /* Bad Request */
'message' => '<h3 class="error">Cannot send form<br>* Field NAME is empty</h3>'
);
}
$json = json_encode($data);
/* Response($data,$statusCode,$additionnalHeaders) */
return new Response($json,200,array('Content-Type'=>'application/json'));
$.ajax({
url: "uri/to/controller",
type: "POST",
data: values, /* Sent data */
cache: false,
success : function(data,e,xhr){
if (xhr.status == 200) {
if (data.responseCode == 200) { /* Success, just a message */
$("#content .contentwrap .itemwrap")
.addClass("success")
.html(data.message);
} else if (data.responseCode == 307) { /* Redirection */
$("#content .contentwrap .itemwrap")
.addClass("success")
.html(data.message);
setTimeout(function(){
$(window).attr("location",data.redirectURI);
},3000);
} else if (data.responseCode == 400) { /* Invalid Form */
$("#content .contentwrap .itemwrap")
.addClass("error")
.html(data.message);
} else { /* Could not understand Response Code */
$("#content .contentwrap .itemwrap")
.html("<h3>Technical issue occured. Please come back later.</h3>");
}
} else {
$("#content .contentwrap .itemwrap")
.html("<h3>Technical issue occured. Please come back later.</h3>");
}
}
})
'action' => 'redirect'
'youAreGoingTo' => 'printAwesomeMessage'
if (data.action == 'redirect')
if (data.youAreGoingTo == 'printAwesomeMessage')