本问题已经有最佳答案,请猛点这里访问。
我有一个PHP变量,其路径为值。我正在尝试将此URL变量传递给JavaScript函数。
private function call_import_function($post_type,$fields,$fields_order,$upld_file)
{
$uploaded_file = $upld_file['file'];
?>
jQuery(document).ready(function($) {
var formdata = {
'action': 'get_csv',
'post_type' : '<?php echo $post_type;?>',
'fields' : '<?php echo $fields;?>',
'fields_order' : '<?php echo $fields_order;?>',
'uploaded_file' : '<?php echo $uploaded_file;?>',
};
$.post('<?php echo $this->ajax_url;?>',formdata, function( data ) {
console.log("Begun!!!");
}).done(function( data ) {
var obj = jQuery.parseJSON(data);
if(obj.error)
{
$("#column2").html(obj.error_msg);
}
else
{
console.log(data);
//$("#column2").html(obj.output);
}
});
});
}
但这给我一个错误,
SyntaxError: malformed hexadecimal character escape sequence
'uploaded_file' : 'E:\xampp\htdocs
ick\projectWed/wp-content/uploads/2'
我已经尝试了$ json这样的php函数,例如json_encode,urlencode,但是没有一个函数为我提供了很好的解决方案。 我需要解决这个错误...
用替换``。反斜杠是转义字符
实际上,该$ url的值是动态生成的..它不是手动放置的.. :: ...在这里,我已经手动放置了供他人理解。
$ url是动态生成的而不是反斜杠的url(如果您还需要移植到非Windows机器上)。
该错误是因为生成的JavaScript无效。那是由于字符串中的斜杠,斜杠在JavaScript中也代表转义序列。一种解决方案是使用json_encode()将$url设置为JavaScript可以理解的字符串文字(因为JSON和JavaScript具有此语法相同)。
@JonathanLonowski这不应该是所引用问题的重复。
@JonathanLonowski他没有在这里传递任何数组。它只是一条路径,这会给反斜杠带来问题。我在提到的问题中没有看到类似的内容。
@JonathanLonowski请参阅我正在执行的完整功能...
@TareqMahmood这篇文章中的答案比问题更笼统,它的建议适用于字符串以及数组以及其他类型的值。但是,为了有意进行更笼统和更深入的解释,还有"如何将变量和数据从PHP传递到JavaScript?"。
@JonathanLonowski我尝试了json_encode和urlencode,但这给了我一个错误jQuery.parseJSON(data); SyntaxError:JSON.parse:JSON数据的第1行第1列出现意外字符
@HasmukhMistry如果在不使用引号的情况下使用json_encode(),则不必使用JSON.parse()。 JSON将在语句中间写出,以供JavaScript将自身解析为字符串文字。 uploaded_file : ,
@JonathanLonowski,Uploaded_file:,这很好从php代码返回一个json_encode数组...在那一刻,我遇到了我之前提到的错误。
@HasmukhMistry如果响应中包含合适的Content-Type标头,则$.post()将已经知道要对其进行解析。因此,data可能已经是等效的JavaScript值,而不是JSON字符串。根据响应中的JSON值,您可以使用console.log(typeof data);进行检查。如果报告object,则说明解析已经完成。
让我们继续聊天中的讨论。
您有正斜杠和反斜杠混合在一起。
$url = ''E:\xampp\htdocs
ick\projectWed/wp-content/uploads/2/3.csv'
应该
$url ="E:\\xampp\\htdocs\
ick\\projectWed\\wp-content\\uploads\\2\\3.csv";
PHP字符串中需要双反斜杠。 他们评估为单个反斜杠。 这是为了将它们与 n(换行), t(制表符), 088(字符X)等转义序列进行区分。
请添加双反斜杠而不是单反斜杠的说明。
单个反斜杠用于特殊字符,例如换行符,制表符或ascii转义序列。要在PHP字符串中使用反斜杠,您必须使用额外的反斜杠对其进行转义。
实际上,该$ url的值是动态生成的..它不是手动放置的.. :) ..在这里,我已经手动放置了供某人理解。
为什么在projectWed之后将单/更改为\?
使用addslashes,其经过测试:
$url = addslashes('E:\xampp\htdocs
ick\projectWed/wp-content/uploads/2/3.csv');
?>
jQuery(document).ready(function($) {
var uploaded_file = '=$url?>';
alert("working fine:" + uploaded_file);
});
您可以检查我的更新代码吗?并查看是否可行... addlashes使我能够传递值,但是在json解析中给出了错误。Json数组由我的php文件返回,使用$ .post调用
只需将对象准备为php数组,然后进行JSON编码
$url = $upld_file['file'];
$formdata = array(
'action' => 'get_csv',
'post_type' => $post_type,
'fields' => $fields,
'fields_order' => $fields_order,
'uploaded_file' => $url,
);
?>
jQuery(document).ready(function($) {
var formdata = JSON.parse('<?php echo json_encode($formData);?>');
您的解决方案清空了我的变量,
@HasmukhMistry在使用我的代码之前是否定义了$url?
是的。我在这里更新了我的问题的代码。
@HasmukhMistry如上所示,您定义了$url但回显了$uploaded_file吗?
抱歉,这是我在此处输入错误。.但是我正在传递相同的变量...
@HasmukhMistry参见我的编辑答案。
如果您有html代码
您可以在html中使用它。
ick\projectWed/wp-content/uploads/2/3.csv?> name='url' id="url">
并在脚本中
var url=$("#url").val();
尝试一下,如果您遇到任何问题,请告诉我。
在PHP文件中
$url ="E:\xampp\htdocs
ick\projectWed/wp-content/uploads/2/3.csv";
?>
url = '<?php echo $url; ?>'
在js文件中
jQuery(document).ready(function(){
console.log( url );
});
实际上,该$ url的值是动态生成的..它不是手动放置的.. :: ...在这里,我已经手动放置了供他人理解。