Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.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
Javascript AjaxFileUpload语法错误:XML表达式中缺少}_Javascript_Ajax - Fatal编程技术网

Javascript AjaxFileUpload语法错误:XML表达式中缺少}

Javascript AjaxFileUpload语法错误:XML表达式中缺少},javascript,ajax,Javascript,Ajax,我正在尝试使用$.ajaxFileUpload上载文件。我的服务器脚本正在返回一个json对象,例如 {“imgName”:“test.jpg”,“imgUrl”:“/uploadtest/images/profile/sam.jpg”} 当我签入firefox时,它会显示正确的响应。还接收到Json。但我仍然在警报中收到一个错误: SyntaxError: missing } in XML expression uploadHttpData: function( r, type ) {

我正在尝试使用$.ajaxFileUpload上载文件。我的服务器脚本正在返回一个json对象,例如

{“imgName”:“test.jpg”,“imgUrl”:“/uploadtest/images/profile/sam.jpg”}

当我签入firefox时,它会显示正确的响应。还接收到Json。但我仍然在警报中收到一个错误:

SyntaxError: missing } in XML expression
uploadHttpData: function( r, type ) {
    var data = !type;
    var dataparsed = r.responseText.split("{"); //added by Jude
    dataparsed = dataparsed[1].split("}"); //added by Jude
    ///Commented By Jude
    ///data = type == "xml" || data ? r.responseXML : r.responseText;
    // If the type is "script", eval it in global context
    data = type == "xml" || "{ " + dataparsed[0] + " }"; //added by Jude
    if ( type == "script" )
        jQuery.globalEval( data );
    // Get the JavaScript object, if JSON is used.
    if ( type == "json" ) {
        eval( "data = " + data );
    }
    // evaluate scripts within html
    if ( type == "html" )
        jQuery("<div>").html(data).evalScripts();
                    //alert($('param', data).each(function(){alert($(this).attr('value'));}));
    return data;
}
我不明白为什么会出现这个错误。 在firebug中,Json对象也正确显示

<script type='text/javascript' src='/js/ajaxfileupload.js'></script>
<script type='text/javascript'>
    function doFileUpload(){
        $("#loading")
        .ajaxStart(function(){
            $(this).show();
        })
        .ajaxComplete(function(){
            $(this).hide();
        });
        $.ajaxFileUpload(
            {
            url:'/json/image/upload.html?action=saveImage&nameSpace=tot',
            secureuri:false,
            fileElementId:'imgFile',
            dataType: 'json',
            success: function (data, status){
                alert("Success: "+data.imgUrl);
                },
            error: function (data, status, e){
                alert("Error: "+e+"---URL: "+data.imgUrl);
                }
            }
        )
    }
</script>

函数doFileUpload(){
$(“#加载”)
.ajaxStart(函数(){
$(this.show();
})
.ajaxComplete(函数(){
$(this.hide();
});
$.ajaxFileUpload(
{
url:'/json/image/upload.html?action=saveImage&nameSpace=tot',
secureuri:false,
fileElementId:'imgFile',
数据类型:“json”,
成功:功能(数据、状态){
警报(“成功:+data.imgUrl”);
},
错误:功能(数据、状态、e){
警报(“错误:+e+”--URL:+data.imgUrl);
}
}
)
}
。。。。


上传图像:

上传

任何人都可以告诉我错误的原因是什么?

我终于找到了问题。问题在于我正在使用的Jquery的AjaxFileUpload插件。数据类型中的“json”需要大写,而不是“json”。数据类型:“JSON”。此外,在修复此问题后,它会自动将和添加到接收到的json数据的开头和结尾。因此,它不是解释为ad-json

<pre>{"imgName": "test.jpg", "imgUrl": "/uploadtest/images/profile/sam.jpg"}</pre>
我收到的实际数据是

{“imgName”:“test.jpg”,“imgUrl”:“/uploadtest/images/profile/sam.jpg”}
现在我必须删除这些标记,然后用$.parseJson()解析它。 如果任何人有相同的错误,那么检查这些问题。
我希望ajaxFileUpload插件能很快修复。

我发现Mozila中的返回数据导致了这个问题。实际上,返回的消息带有
消息,这是一个错误

我应用的修复方法是删除返回消息中不需要的任何内容,并且它可以正常工作。但我不确定这是否是一个永久的解决办法。在ajaxfileupload.js脚本文件的末尾,我修改了
uploadHttData
函数

$Ex=end(explot('.', image));
uploadHttpData:函数(r,类型){
变量数据=!类型;
var dataparsed=r.responseText.split(“{”);//由Jude添加
dataparsed=dataparsed[1]。拆分(“}”);//由Jude添加
///裘德评论
///data=type==“xml”| | data?r.responseXML:r.responseText;
//如果类型为“脚本”,请在全局上下文中对其求值
data=type==“xml”| |“{”+dataparsed[0]+“}”;//由Jude添加
如果(类型==“脚本”)
globalEval(数据);
//如果使用JSON,则获取JavaScript对象。
如果(类型==“json”){
评估(“数据=”+数据);
}
//在html中评估脚本
如果(类型==“html”)
jQuery(“”.html(数据).evalscript();
//警报($('param',data).each(函数(){alert($(this.attr('value'));}));
返回数据;
}

要解决此问题,请确保将答案的内容类型设置为“text/html”

看起来确实很奇怪:-)

原因是Firefox会处理答案以生成文档。
当答案的内容类型为“text/plain”Firefox(仅显示html)时,通过添加标记将答案转换为html。

如果您希望返回一维json响应,Jude Adeline答案是正确的。如果您希望从PHP返回多维数组,请将代码修改为以下内容

$tmp=explot('.', image);
$Ex=end($tmp);
uploadHttpData:函数(r,类型){
变量数据=!类型;
var dataparsed=r.responseText.substr(1);//已更改并添加
dataparsedLength=dataparsed.length;//已更改或添加
dataparsed=dataparsed.substr(0,dataparsedLength-1);//已更改并添加
data=type==“xml”| |“{”+dataparsed+“}”;//已更改或添加
//如果类型为“脚本”,请在全局上下文中对其求值
如果(类型==“脚本”)
globalEval(数据);
//如果使用JSON,则获取JavaScript对象。
如果(类型==“json”)
评估(“数据=”+数据);
//在html中评估脚本
如果(类型==“html”)
jQuery(“”.html(数据).evalscript();
返回数据;
}

我已经解决了这个问题-您只需更改一行即可
如果((type==“json”)|(type==“json”))在FireFox和IE中都可以正常工作,我遇到了这样的错误

我用过:

mixed end ( array &$array );
$fruits = array('apple', 'banana', 'cranberry');
echo end($fruits); // cranberry
在doajaxfileupload.php中,出现以下错误:

“AjaxFileUpload语法错误:XML表达式中缺少}”

我把它改成:

xml.responseText = io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:null;
这对我有用

下表给出了以下示例:

我已经解决了这个问题

只需更新代码行:

    if ( type == "json" )
    {
        // If you add mimetype in your response,
        // you have to delete the '<pre></pre>' tag.
        // The pre tag in Chrome has attribute, so have to use regex to remove
        var data = r.responseText;
        var rx = new RegExp("<pre.*?>(.*?)</pre>","i");
        var am = rx.exec(data);
        //this is the desired data extracted
        var data = (am) ? am[1] : "";    //the only submatch or empty
        eval( "data = " + data );
    }
关于这一点:


innerHTML导致了问题。

要从响应中重新格式化pre,可以使用regex(信用证:)

if(type==“json”)
{
//如果在响应中添加mimetype,
//您必须删除“”标记。
//Chrome中的pre标记具有属性,因此必须使用regex删除
var数据=r.responseText;
var rx=新的RegExp(“(*?”,“i”);
var am=rx.exec(数据);
//这是提取的所需数据
变量数据=(am)?am[1]:“”;//唯一的子匹配项或为空
评估(“数据=”+数据);
}

我通过在github中搜索ajaxfileupload找到了json问题的解决方案,并找到了适合我的这个版本。一旦我在Safari和Chrome上大写json,json数据返回将被包装在其中。还需要对数据进行认证。谢谢你的解决方案,Jude。对我来说有效的是使用Jquery eval(“data=”+$(data.text());(在最后一行)
xml.responseText = io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:null;
xml.responseText = io.contentWindow.document.body?io.contentWindow.document.body.textContent:null;
    if ( type == "json" )
    {
        // If you add mimetype in your response,
        // you have to delete the '<pre></pre>' tag.
        // The pre tag in Chrome has attribute, so have to use regex to remove
        var data = r.responseText;
        var rx = new RegExp("<pre.*?>(.*?)</pre>","i");
        var am = rx.exec(data);
        //this is the desired data extracted
        var data = (am) ? am[1] : "";    //the only submatch or empty
        eval( "data = " + data );
    }