2010-07-29 24 views
1

我使用jquery.ajax来保存丰富的文本区域。用ajax发送html文本,问题在'&'上?

corr=some.innerHTML(); /* corr='< some text <' */ 
$.ajax({ 
    type:"POST", url:"flatplan/save_corr.php", 
    data:"corr="+corr+"&IDFS="+IDFILES, 
    success: function(msg){ 

    }, 
    error:function(x,e){ 
     ajax_errors(x,e); 
    } 
}); 

的问题是,科尔变量可以包含“&”字符内,并将其发送更多PARAMS 给人的问题。有没有办法用ajax html文本发布?

回答

5

您可以(也应该)转义查询字符串组件with encodeURIComponent

data: "corr=" + encodeURIComponent(corr) + "&IDFS=" + encodeURIComponent(IDFILES), 

编辑:jQuery可以接受数据字段中的对象。你应该只使用

data: ({ 
    corr: corr, 
    IDFS: IDFILES 
}), 

这样jQuery可以自动编码查询字符串。

+0

同意,发送数据到jquery作为一个对象是迄今为止最好的计划。 '数据作为查询字符串'的语法在我看来是非常糟糕的,显然它还有其他问题。 – JAL 2010-07-29 15:30:05

+0

+1将数据作为对象发送。 – Bakhtiyor 2010-12-11 10:06:21

0

我会亲自转义所有通过AJAX发布的html,并在处理之前使用PHP文件unescape生成结果或理智检查PHP中的输入。我没有被抓到这个,但我可以看到它可能是一个问题。

1

更正值不能包含&。如果是这样,你需要urlencode该值。为此,请使用escape()方法。

var corr = escape(some.innerHTML()); //(corr='< some text <') 
$.ajax({ 
    type:"POST", 
    url:"flatplan/save_corr.php", 
    data:"corr="+corr+"&IDFS="+IDFILES, 
    success: function(msg){ 
     //success handler 
    }, 
    error:function(x,e){ 
     ajax_errors(x,e); 
    } 
});