2014-01-08 42 views
1

第一:我是AJAX的新手,刚刚了解一些基本知识约PHP对.php文件的AJAX请求返回空字符串

我想做一个AJAX发布到.php文件。要做到这一点,我得到了这样的代码:

var lat = results[0].geometry.location.lat(); 
var lng = results[0].geometry.location.lng(); 

$.ajax({ 
    url: 'http://api.geonames.org/findNearbyPostalCodes', 
    type: 'GET', 
    data: {lat: lat, lng: lng, radius: 20, maxRows: 100, country: 'CH', username: 'bbag8274'}, 
    success: function(scriptData, textStatus, jqXHR){ 
     $.ajax({ 
      url: 'privatkunden_data.php', 
      type: 'POST', 
      data: {xmldata: jqXHR.responseText, address: $('#address').val()}, 
      success: function(secondScriptData, textStatus, jqXHR){ 
       alert('suc'); 
      }, 

      error: function(jqXHR, textStatus, errorThrown){ 
       alert(jqXHR.responseText); 
      } 
     });       
    }, 

    error: function(jqXHR, textStatus, errorThrown){ 
     alert('fail'); 
    } 
}); 

如果第一篇文章成功执行第二篇。但第二个执行错误:函数。这里是我的.PHP文件:

$xmlroot = $_POST['xmldata']; 

$doc = new DOMDocument; 
$doc->loadXML($xmlroot); 

foreach($doc->getElementsByTagName('postalcode') as $postalcode){ 
    $zipcodes = $postalcode->nodeValue . " "; 
} 

的问题是:该AJAX后返回一个空的警告框(alert(jqXHR.responseText);)和.PHP文件返回错误:

**PHP Warning: DOMDocument::loadXML(): Empty string supplied as input** 

所以错误说我的$xmlroot变量是空的,对不对?如果是,为什么它是空的?它应填写来自xmldata的信息。

建议表示赞赏

在此先感谢

+7

你不能做Ajax请求,除非您使用JSONP不属于当前域。查看维基百科有关[同源策略]的文章(http://en.wikipedia.org/wiki/Same-origin_policy)。 – h2ooooooo

+0

我不确切地知道你的意思。我不能这样做?感谢您的链接,我会检查它 – Roman

+0

lat和lng是什么? – Ventura

回答

1

第一AJAX调用的数据是未来的权利。尝试将dataType作为文本并将此文本转换为PHP上的xml。

dataType: 'text' 

例子:

$.ajax({ 
    url: 'http://api.geonames.org/findNearbyPostalCodes', 
    type: 'get', 
    dataType: 'text', 
    data: {lat: '47.644200', lng: '9.180260', radius: 20, maxRows: 100, country: 'CH', username: 'bbag8274'}, 
    success: function(result){ 
     alert(result) 
    } 
}); 

活生生的例子:http://jsfiddle.net/t5jA5/

+0

这没有帮助:/如果我添加dataType它不再加载 – Roman

+1

它在这里工作:http://jsfiddle.net/t5jA5/ – Ventura

+0

好吧。然后我的代码中有其他错误。我会再看一遍,并尝试修复它。这个答案是一个代码的正确答案** ** – Roman

1

它可能是你指定POST参数,虽然你做一个GET请求?

更改URL中类似

http://api.geonames.org/findNearbyPostalCodes?lat=47&lng=9&username=demo 

...读:http://www.geonames.org/export/web-services.html

+0

如果我使用GET,我有'data:{}'函数中的所有参数,如果我使用POST,我在'url: '功能。它应该不重要我使用。唯一的区别是,使用GET时,用户将看到url,而不使用POST。或者我完全错误的评论? :) – Roman

+0

好的。对不起,你是对的。但是其他的东西在数据线上是不正确的。它不应该读取 数据:'{“lat”:47.644200,“lng”:9.18026,“radius”:20,“maxRows”:100,“country”:“CH”,“username”:“bbag8274”} ', – theking2

+0

是的,这是它读取。这是成功的,但第二篇文章并不成功。因为在第二个AJAX后,它执行错误功能,而不是成功功能 – Roman