2011-06-17 65 views
0

美好的一天。我有流动的问题。javascript,php,ajax - AJAX响应始终为空

我有2个域名。在一个域名上,我发送了一个ajax帖子给另一个域名,期待一些结果。问题是响应总是空的。如果我检查网络标签的请求看起来没问题(帖子数据没问题),它没有收到任何错误,它结束了(我在句柄响应函数上发出一个警告来检查响应是什么)。我尝试向随机域发送请求(如example.com),以查看是否有任何东西。答复是一样的......没有。

这里是我使用的脚本:

function sendReqPost(url) { 
     http_request = false; 
     if (window.XMLHttpRequest) { // Mozilla, Safari,... 
     http_request = new XMLHttpRequest(); 
     if (http_request.overrideMimeType) { 
      // set type accordingly to anticipated content type 
      //http_request.overrideMimeType('text/xml'); 
      http_request.overrideMimeType('text/html'); 
     } 
     } else if (window.ActiveXObject) { // IE 
     try { 
      http_request = new ActiveXObject("Msxml2.XMLHTTP"); 
     } catch (e) { 
      try { 
       http_request = new ActiveXObject("Microsoft.XMLHTTP"); 
      } catch (e) {} 
     } 
     } 
     if (!http_request) { 
     alert('Cannot create XMLHTTP instance'); 
     return false; 
     } 
     //http_request.onreadystatechange = handleResponseAccept; 
     http_request.open('POST', url, true); 
     http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
     http_request.setRequestHeader("Content-length", parameters.length); 
     http_request.setRequestHeader("Connection", "close"); 
     //parameters is a global variable with the post data.  
     http_request.send(parameters); 
    } 

我一倍脚本检查一切......我也插在请求PHP页面回声,看看我是否得到任何东西。无论我做什么,回应都是空的。 P.S.在另一个域上,ajax脚本工作正常。一模一样。

+0

http_request.responseText在哪里? – 2011-06-17 12:31:35

+0

这听起来像是你遇到了XSS限制。另外,请原谅我,因为我可能已经跑过去了,你知道你是在异步模式下正确运行它吗? – 2011-06-17 12:33:04

+0

请考虑为自己做一个忙,并使用库(例如jQuery)。这整个代码总结为 `$ .post(url,parameters,function(){/ * on success here//});` – mkilmanas 2011-06-17 12:40:56

回答

4

我有2个域名。在一个域名上,我发送了一个ajax帖子给另一个域名,期待一些结果。

这是你的问题。这是因为JavaScript中的同源策略。这就是为什么...

...在另一个域上的ajax脚本工作正常。

虽然有一些解决方法,称为Cross Domain Ajax

为了您的需要,因为您明显需要HTML而不是JSON,所以我会建议一个小PHP脚本来从其他域获取内容并将其转发到客户端。这将被称为Ajax代理

请参阅this question

0

我没有看到您的http_request.responseText,它返回请求URL中的echo'ed。

所以尽量补充一点:

http_request.onreadystatechange = function() { 
    if (http_request.readyState == 4) { 
     if (http_request.status == 200) { 
      alert(http_request.responseText); 
     } else { 
      alert("An error occurred: "+ http_request.statusText); 
     } 
    } 
}; 

前:

//parameters is a global variable with the post data. 

看看它是否工作。