Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony2和Submit-wit-JavaScript:如何获取html内容_Php_Javascript_Json_Post_Symfony - Fatal编程技术网

Php Symfony2和Submit-wit-JavaScript:如何获取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,

我有一个在Symfony2项目的表格,我需要提交表格。第一个想法是使用ajax提交,但问题是这将无法通过symfony2所需的验证,我收到了CSRF错误消息(请参阅我前面的问题:)

感谢@Elnur的回答,我现在可以使用$post提交表格,但还有一个问题

使用Ajay,我将返回一个html响应,并且我能够将此响应附加到一个html元素:

$.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>
                    &nbsp;
                </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;">&nbsp;</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')