2011-05-01 88 views
0

我已经看到了有关从发送HTML数据PHP 一个HTML页面的一些问题,但这个问题实际上是相反不起作用(我可以从PHP HTML罚款与json_encode)。发送HTML通过的getJSON javascript变量

的一小段代码,说明大部分:

savePage = function() { 
var pagecontents = $("#editcontents").val(); 
log("Attempting to save page..."); 
$.getJSON(docTools+"?jsoncallback=?",{action:'update', loginCookie:loginCookie, page:thisFile, newdata:pagecontents}, function(data) { 
    if(data.response[0].answer === 'true') { 
    log('Page'+thisFile+' was saved correctly: '+data.response[0].details); 
    $("#editcontents, #saveedit, #canceledit").remove(); 
    $("#bodycontents").html(pagecontents); 
    } else { 
    log('Failed to save page. Error (' + data.response[0].errorcode + ') : ' + data.response[0].errormessage); 
    } 
}); 
} 

FYI:登录少了点,如果它存在CONSOLE.LOG。

所以基本上这里所发生的是,pagecontents变量包含HTML数据,所有这些都在<body>标签(意思是没有头信息,如果该事项)。然而,当我真正调用这个函数时,log()函数可以正常工作......但是getJSON()永远不会完成(实际上,据我所知它永远不会传递给我的PHP服务器)。

如果我用一个标准字符串替换页面内容,它工作正常。

在发送之前,我需要做类似于JavaScript的json_encode吗?什么东西可以将所有内容转换为html实体?

- 编辑 -

所以我刚刚发现在Firebug的“网络”选项卡,它的显示我的东西我没有意识到:它显示了所有正确的数据的GET请求......但服务器返回一个404。我不知道这是怎么发生的,因为PHP文件与我之前5秒钟抓取的东西是一样的。即使我试图用.post(...,'json')更改.getJSON(),Firebug仍然显示GET请求,而不是POST,所以现在让我更加困惑。

+2

多久实际字符串? JSONP是一个GET请求,所以你会遇到一些限制。 – 2011-05-01 05:36:10

+0

啊,我明白你的意思了,你可能会做点什么。在这个例子中,代码长达3632个字符,这是相当长的(并且我不得不发送最长的)。由于getJSON不会发布,我可能需要深入挖掘... – 2011-05-01 05:41:49

回答

0

您可能还需要使用encodeURIComponent,因为所有数据都将在URL字符串中发送(长度也可能是个问题)。

+0

这是由jQuery内部处理的,当您将数据参数作为对象传递时:) – 2011-05-01 06:02:54

+0

啊。很高兴知道。谢谢! – 2011-05-01 06:03:35

0

使用

$.post {(docTools+"?jsoncallback=?",{action:'update', loginCookie:loginCookie, page:thisFile, newdata:pagecontents}, function(data) { 
    if(data.response[0].answer === 'true') { 
    log('Page'+thisFile+' was saved correctly: '+data.response[0].details); 
    $("#editcontents, #saveedit, #canceledit").remove(); 
    $("#bodycontents").html(pagecontents); 
    } else { 
    log('Failed to save page. Error (' + data.response[0].errorcode + ') : ' + data.response[0].errormessage); 
    } 
}, 
    'json' 
); 
+0

你不能发布到另一个域名,看到回应......它被相同的出处政策禁止,为什么JSONP存在:) – 2011-05-01 06:03:37

+0

@Nick我没有意识到这是一个跨域AJAX问题。 – Aleadam 2011-05-01 06:15:34

+0

寻找在URL中指定的回调,这通常是故事的标志:) – 2011-05-01 06:16:45